Skip to content

Chai Nock extends Chai with a language for asserting facts about Nock.

License

Notifications You must be signed in to change notification settings

ComparetheMarket/chai-nock

This branch is 1 commit ahead of master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

d8786b4 · Sep 27, 2023

History

16 Commits
Dec 14, 2018
Nov 27, 2018
Dec 13, 2018
Nov 26, 2018
Dec 14, 2018
Nov 28, 2018
Jul 24, 2019
Jul 24, 2019
Sep 27, 2023
Jul 23, 2020

Repository files navigation

Chai Assertions for Nock

Build Status Coverage Status npm version

Nock Chai extends Chai with a language for asserting facts about Nock.

Instead of manually wiring up your expectations to intercepting a nocked request:

const nockedRequest = nock('http://some-url');

nockedRequest.on('request', function(req, interceptor, body) {
  expect(body).to.deep.equal({ hello: 'world' });
});

you can write code that expresses what you really mean:

return expect(nock('http://some-url')).to.have.been.requestedWith({
  hello: 'world'
});

Installation

npm install chai-nock

Then add to your test setup:

const chai = require('chai');
const chaiNock = require('chai-nock');

chai.use(chaiNock);

Assertions

requested

Asserts that a request has been made to the nock.

it('requested', () => {
  const requestNock = nock('http://bbc.co.uk')
    .get('/')
    .reply(200);

  request({
    uri: 'http://bbc.co.uk',
  });

  return expect(requestNock).to.have.been.requested;
});

requestedWith(body)

Asserts that a request has been made to the nock with a body that exactly matches the object provided.

it('requestedWith', () => {
  const requestNock = nock('http://bbc.co.uk')
    .get('/')
    .reply(200);

  request({
    json: true,
    uri: 'http://bbc.co.uk',
    body: {
      hello: 'world'
    }
  });

  return expect(requestNock).to.have.been.requestedWith({ hello: 'world' });
});

requestedWithHeaders(headers)

Asserts that a request has been made to the nock with headers that exactly match the object provided.

it('requestedWithHeaders', () => {
  const requestNock = nock('http://bbc.co.uk')
    .get('/')
    .reply(200);

  request({
    json: true,
    uri: 'http://bbc.co.uk',
    headers: {
      myHeader: 'myHeaderValue'
    }
  });

  return expect(requestNock).to.have.been.requestedWithHeaders({
    host: 'bbc.co.uk',
    accept: 'application/json',
    myHeader: 'myHeaderValue'
  });
});

requestedWithHeadersMatch(partialHeaders)

Asserts that a request has been made to the nock with headers that contain the key/value pairs in the object provided.

it('requestedWithHeadersMatch', () => {
  const requestNock = nock('http://bbc.co.uk')
    .get('/')
    .reply(200);

  request({
    json: true,
    uri: 'http://bbc.co.uk',
    headers: {
      myHeader: 'myHeaderValue',
      otherHeader: 'otherHeaderValue'
    }
  });

  return expect(requestNock).to.have.been.requestedWithHeadersMatch({
    myHeader: 'myHeaderValue'
  });
});

Setting a Timeout

  • By default, a timeout of 2 seconds is applied to assertions on nock requests. This means that if nock has not intercepted the request within the set time, the assertion will be false
  • You can set a custom global timeout by calling setTimeout on the chaiNock object:
const chaiNock = require('chai-nock');

chai.use(chaiNock);
// Set a timeout of 10 seconds
chaiNock.setTimeout(10000);
  • WARNING: If not set already, the test timeout must be greater than that of chaiNock!
jest.setTimeout(12000);

Usage

const { expect } = require('chai');
const nock = require('nock');
const request = require('request-promise-native');

describe('example', () => {
  it('test', () => {
    const requestNock = nock('http://bbc.co.uk')
    .get('/')
    .reply(200);

    request({
      json: true,
      uri: 'http://bbc.co.uk',
      body: {
        hello: 'world'
      }
    });

    return expect(requestNock).to.have.been.requestedWith({ hello: 'world' });
  });
});

About

Chai Nock extends Chai with a language for asserting facts about Nock.

Resources

License

Stars

Watchers

Forks

Packages

No packages published