Nock 用 Chai アサーション

Build Status Coverage Status npm version

Nock Chai は、ChaiNock の事実をアサートするための言語機能を追加します。

インターセプトするノック要求への期待値を手動で配線するのではなく

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)

指定されたオブジェクトと完全に一致する 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' });
  });
});