我试图掌握工具Nock以模拟来自我的代码执行调用的请求和响应。我使用 npm request 作为简单的 HTTP 客户端来请求后端 REST API,使用 Chai 请求期望库和 Mocha 来运行我的测试。这是我用于测试的代码:
var nock = require('nock');
var storyController = require('../modules/storyController');
var getIssueResponse = {
//JSON object that we expect from the API response.
}
it('It should get the issue JSON response', function(done) {
nock('https://username.atlassian.net')
.get('/rest/api/latest/issue/AL-6')
.reply(200, getIssueResponse);
storyController.getStoryStatus("AL-6", function(error, issueResponse) {
var jsonResponse = JSON.parse(issueResponse);
expect(jsonResponse).to.be.a('object');
done();
})
});
这是执行 GET 请求的代码:
function getStoryStatus(storyTicketNumber, callback) {
https.get('https://username.atlassian.net/rest/api/latest/issue/' + storyTicketNumber, function (res) {
res.on('data', function(data) {
callback(null, data.toString());
});
res.on('error', function(error) {
callback(error);
});
})
}
这个单一的测试通过了,我不明白为什么。看起来它实际上是在打一个真正的电话,而不是使用我的假诺克请求/响应。如果我评论 nock 部分或更改:
.reply(200, getIssueResponse) to .reply(404)
它不会破坏测试并且没有任何变化,我没有对我的 nock 变量做任何事情。有人可以用一个清晰的例子向我解释如何使用 Nock 在我的 NodeJS http-client 中模拟请求和响应吗?