frisby

Frisby is a REST API testing framework built on Jest that makes testing API endpoints easy, fast, and fun.

Github星跟蹤圖

Frisby

NPM
Build
Status

Frisby.js

Introduction

Frisby.js an API testing tool built on top of
Jest that makes testing API endpoints easy,
fast and fun.

Installation

Install Frisby v2.x from NPM into your project:

npm install frisby --save-dev

Creating Tests

Simple Example

The minimum setup to run a single test expectation.

const frisby = require('frisby');

it('should be a teapot', function () {
  // Return the Frisby.js Spec in the 'it()' (just like a promise)
  return frisby.get('http://httpbin.org/status/418')
    .expect('status', 418);
});

Nested Dependent HTTP Calls

A more complex example with nested dependent Frisby tests with Frisby's Promise-style then method.

const frisby = require('frisby');
const Joi = frisby.Joi; // Frisby exposes Joi for convenience

describe('Posts', function () {
  it('should return all posts and first post should have comments', function () {
    return frisby.get('http://jsonplaceholder.typicode.com/posts')
      .expect('status', 200)
      .expect('jsonTypes', '*', {
        userId: Joi.number(),
        id: Joi.number(),
        title: Joi.string(),
        body: Joi.string()
      })
      .then(function (res) { // res = FrisbyResponse object
        let postId = res.json[0].id;

        // Get first post's comments
        // RETURN the FrisbySpec object so function waits on it to finish - just like a Promise chain
        return frisby.get('http://jsonplaceholder.typicode.com/posts/' + postId + '/comments')
          .expect('status', 200)
          .expect('json', '*', {
            postId: postId
          })
          .expect('jsonTypes', '*', {
            postId: Joi.number(),
            id: Joi.number(),
            name: Joi.string(),
            email: Joi.string().email(),
            body: Joi.string()
          });
      });
  });
});

Built-In Expect Handlers

Frisby comes with many handy built-in expect handlers to help you test the HTTP
response of your API.

  • status - Check HTTP status
  • header - Check HTTP header key + value
  • json - Match JSON structure + values (RegExp can be used)
  • jsonStrict - Match EXACT JSON structure + values (extra keys not tested for cause test failures)
  • jsonTypes - Match JSON structure + value types
  • jsonTypesStrict - Match EXACT JSON structure + value types (extra keys not tested for cause test failures)
  • bodyContains - Match partial body content (string or regex)
  • responseTime - Check if request completes within a specified duration (ms)

Define Custom Expect Handlers

When Frisby's built-in expect handlers are not enough, or if you find yourself
running the same expectations in multiple places in your tests, you can define
your own custom expect handler once, and then run it from anywhere in your
tests.

beforeAll(function () {
  // Add our custom expect handler
  frisby.addExpectHandler('isUser1', function (response) {
    let json = response.body;

    // Run custom Jasmine matchers here
    expect(json.id).toBe(1);
    expect(json.email).toBe('testy.mctesterpants@example.com');
  });
});

// Use our new custom expect handler
it('should allow custom expect handlers to be registered and used', function () {
  return frisby.get('https://api.example.com/users/1')
    .expect('isUser1')
});

afterAll(function () {
  // Remove said custom handler (if needed)
  frisby.removeExpectHandler('isUser1');
});

Expecting JSON types using Joi

With Frisby, you can use Joi to set the expectation that the JSON body response from the HTTP call meets a defined schema. Check out the Joi API for more details.

Using Jasmine Matchers Directly

Any of the Jasmine matchers
can be used inside the then method to perform additional or custom tests on
the response data.

const frisby = require('frisby');

it('should be user 1', function () {
  return frisby.get('https://api.example.com/users/1')
    .then(function (res) {
      expect(res.json.id).toBe(1);
      expect(res.json.email).toBe('testy.mctesterpants@example.com');
    });
});

Running Tests

Frisby uses Jasmine style assertion syntax, and uses
Jest to run tests.

Jest can run sandboxed tests in parallel, which fits the concept of HTTP
testing very nicely so your tests run much faster.

Install Jest

npm install --save-dev jest

Create your tests

mkdir __tests__
touch __tests__/api.spec.js

Run your tests from the CLI

cd your/project
jest

Documentation

Documentation is hosted at frisbyjs.com, the
documentation pages has separate
repository.

License

Licensed under the BSD 3-Clause
license.

主要指標

概覽
名稱與所有者vlucas/frisby
主編程語言JavaScript
編程語言JavaScript (語言數: 1)
平台
許可證
所有者活动
創建於2012-02-23 23:10:20
推送於2023-10-23 19:22:49
最后一次提交2023-10-23 21:22:46
發布數51
最新版本名稱v2.1.2 (發布於 2019-06-22 08:09:25)
第一版名稱v0.2.3 (發布於 2011-12-20 17:58:05)
用户参与
星數1.5k
關注者數42
派生數200
提交數518
已啟用問題?
問題數411
打開的問題數25
拉請求數135
打開的拉請求數3
關閉的拉請求數45
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?