Nock 的 Chai 斷言
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' });
});
});