npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@jh86/icedfrisby

v0.2.5

Published

IcedFrisby: REST API Endpoint Testing built on Mocha and Chai

Downloads

5

Readme

IcedFrisby

Build Status Coverage Status Dependency Status npm

IcedFrisby is a Node.js npm module that makes testing API endpoints easy, fast and fun. Based on the original Frisby project.

:orange_book: API Documentation

The IcedFrisby API Docs are located in API.md.

Changelog

The IcedFrisby Changelog is located in CHANGELOG.md.

What makes IcedFrisby different?

  • Uses Mocha as the driver instead of Jasmine
  • Uses Chai for assertions
  • Uses Joi for flexible and simple schema/type JSON validation
  • expectJSON(...) is now strict. Undefined/null fields are not ignored and missing fields are considered errors
  • Adds expectContainsJSON(...)! Test JSON responses without knowing every field.
  • Uses lodash instead of underscore
  • Returns a 599 (network timeout error) response if a request times out or is unavailable instead of a 500

Installation

Install IcedFrisby from NPM:

npm install icedfrisby --save-dev

Show me some code!

IcedFrisby tests start with frisby.create() with a description of the test followed by one of get(), put(), post(), delete(), or head(), and ending with toss() to generate the resulting Mocha test. There is a expectStatus() method built in to more easily test HTTP status codes. Any other Mocha expect tests should be done inside the after() or afterJSON() callback.

Each set of unique sequences or API endpoint tests should be started with new frisby.toss method calls instead of trying to chain multiple HTTP requests together.


var frisby = require('icedfrisby');  // get IcedFrisby with `npm install icedfrisby`
var Joi = require('joi'); // get Joi with `npm install joi`

var URL = 'http://localhost:3000/';
var URL_AUTH = 'http://username:password@localhost:3000/';

frisby.globalSetup({ // globalSetup is for ALL requests
  request: {
    headers: { 'X-Auth-Token': 'fa8426a0-8eaf-4d22-8e13-7c1b16a9370c' }
  }
});

frisby.create('GET user johndoe')
  .get(URL + '/users/3.json')
  .expectStatus(200)
  .expectJSONTypes({
    id: Joi.number(),
    username: Joi.string(),
    is_admin: Joi.boolean()
  })
  .expectJSON({
    id: 3,
    username: 'johndoe',
    is_admin: false
  })
  .expectJSONTypes({
    id: Joi.number(),
    username: Joi.string(),
    is_admin: Joi.boolean()
  })
  // 'afterJSON' automatically parses response body as JSON and passes it as an argument
  .afterJSON(function(user) {
  	// You can use any normal assertions here
  	expect(1+1).to.equal(2);

  	// Use data from previous result in next test
    frisby.create('Update user')
      .put(URL_AUTH + '/users/' + user.id + '.json', {tags: ['mocha', 'bdd']})
      .expectStatus(200)
    .toss();
  })
.toss();

Any Mocha/Chai/whatever tests can be used inside the after and afterJSON callbacks to perform additional or custom tests on the response data.

Running Tests

Run tests as you normally would with Mocha.

Install Mocha

npm install -g mocha

Run it from the CLI

cd your/project
mocha tests/someTest.js --reporter nyan

IcedFrisby Development

Setup

Code quality is enforced with JSHint. You will need to install JSHint as it is run with the tests: npm install -g jshint

Code Coverage

You can assess code coverage by running istanbul cover _mocha ./spec/**/*_spec.js -R spec

Contributions

Contributions are awesome! If you have an idea or code that you want to contribute, feel free to submit a pull request and I will gladly review it. I am open to pretty much anything.

Roadmap

  1. Make output errors more useful. It can be hard to track down which assertion is causing what error.
  2. Add a "stack trace" for paths to help discern why a path traversal failed
  3. Support chained tests/promises. Related: #127, #154, #200
  4. custom assertion plugin support

License

Licensed under the MIT/BSD license.