用于 Nock 的 Chai 断言

Build Status Coverage Status npm version

Nock Chai 使用一种语言扩展了 Chai,用于断言有关 Nock 的事实。

无需手动将期望连接到拦截的 Nock 请求

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

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

您可以编写代码来表达您的真实意图

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

安装

npm install chai-nock

然后添加到您的测试设置中

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

chai.use(chaiNock);

断言

已请求

断言已对 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)

断言已对 Nock 发出请求,其主体与提供的对象完全匹配。

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)

断言已对 Nock 发出请求,其标头与提供的对象完全匹配。

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)

断言已对 Nock 发出请求,其标头包含提供的对象中的键/值对。

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'
  });
});

设置超时

  • 默认情况下,对 Nock 请求的断言会应用 2 秒的超时。这意味着如果 Nock 在设定的时间内没有拦截请求,则断言将为 false
  • 您可以通过在 chaiNock 对象上调用 setTimeout 来设置自定义全局超时: ```javascript const chaiNock = require(‘chai-nock’);

chai.use(chaiNock); // 设置 10 秒的超时 chaiNock.setTimeout(10000);

* WARNING: If not set already, the test timeout must be greater than that of chaiNock! 
```javascript 
jest.setTimeout(12000);

用法

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' });
  });
});