1. chai-fetch-mock
Chai plugin for fetch-mock library
chai-fetch-mock
Package: chai-fetch-mock
Created by: gakimball
Last modified: Mon, 13 Jun 2022 05:50:57 GMT
Version: 3.0.0
License: MIT
Downloads: 1,459
Repository: https://github.com/gakimball/chai-fetch-mock

Install

npm install chai-fetch-mock
yarn add chai-fetch-mock

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

RELATED POST

10 Must-Know Windows Shortcuts That Will Save You Time

10 Must-Know Windows Shortcuts That Will Save You Time

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Navigating AWS Networking: Essential Hacks for Smooth Operation

Navigating AWS Networking: Essential Hacks for Smooth Operation

Achieving Stunning Visuals with Unity's Global Illumination

Achieving Stunning Visuals with Unity's Global Illumination

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code