chai-fetch-mock

Chai plugin for fetch-mock library

Usage no npm install needed!

<script type="module">
  import chaiFetchMock from 'https://cdn.skypack.dev/chai-fetch-mock';
</script>

README

chai-fetch-mock

Travis npm

Chai plugin for fetch-mock library

A set of Chai assertions for fetch-mock, a mocking library for fetch() and isomorphic-fetch.

Installation

This library depends on:

"peerDependencies": {
  "chai": "3.x || 4.x",
  "fetch-mock": "5.1.x || 6.x"
}

Note: fetch-mock 6.0 is only compatible with Node.js 7 or greater.

Install those, and then install:

npm install chai-fetch-mock

Usage

Note: if you want to use this plugin with other Chai plugins that use a similar vocabulary—such as sinon-chai, which also has a called assertion—apply chai-fetch-mock last. chai-fetch-mock's methods will only kick in when an assertion calls the route() method.

import chai from 'chai';
import chaiFetchMock from 'chai-fetch-mock';
import fetchMock from 'fetch-mock';

// Call conflicting plugins before
// chai.use(sinonChai)
chai.use(chaiFetchMock);

describe('test', () => {
  before(() => fetchMock.get('/cats', { cats: 5 }))

  it('calls fetch', () => {
    return fetch('/cats').then(() => {
      expect(fetchMock).route('/cats').to.have.been.called;
    });
  });

  after(() => fetchMock.restore());
});

API

route(value)

Sets up an assertion to check calls to a matcher with the name value. This is either the URL of the route, or the custom name of the route. Use this before any other fetch-mock assertion.

// Default name
fetchMock.get('*', {});
expect(fetchMock).route('*');

// Custom name
fetchMock.get(/.*/, {}, { name: 'all' });
expect(fetchMock).route('all');

This function on its own only asserts that the mock route exists.

called

Asserts that fetch() was used to call a specific route at least once.

expect(fetchMock).route('*').to.have.been.called;
expect(fetchMock).route('*').to.not.have.been.called;

This method can be chained to the ones below, allowing you to check if a route was called and if it was called with specific properties in one assertion.

args(value)

Asserts that the arguments of last call to fetch() to a specific route deeply equal value.

getCat(1).then(() => {
  expect(fetchMock).route('/cats/get').to.have.been.called.with.args(['/cats/get', { id: 1 }]);
});

args(value)

Asserts that the URL of last call to fetch() to a specific route equals value.

getDoggo(2).then(() => {
  expect(fetchMock).route('/doggos/get').to.have.been.called.with.url('/doggos/get/2');
});

options(value)

Asserts that the options of last call to fetch() to a specific route deeply equal value.

getDoggo(2).then(() => {
  expect(fetchMock).route('/doggos/get').to.have.been.called.with.options({ mode: 'same-origin' });
});

License

MIT © Geoff Kimball