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

斷言

requested

斷言請求已發送到 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 未在設定的時間內攔截到請求,斷言將會為假
  • 您可以透過在 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' });
  });
});