用于 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);
断言
已请求
断言已对 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' });
});
});