【发布时间】:2014-11-29 00:32:06
【问题描述】:
我需要测试一个包含调用 API 服务器的子方法的方法。我想研究这个内部子方法,但我似乎做不到。这是一个例子:
var requests = require('./requests.js');
var utilityClass = {
methodCreatesObject: function (callback) {
// Here’s the method I’m trying to stub:
requests.makeCallToAPI(requestObject, function (err, responseFromAPI) {
doSomethingWithResponse(responseFromAPI, function (err, finalObject) {
if (err) {
callback(err, null);
} else {
callback(null, finalObject); // <- Want to test the value of finalObject
}
});
});
}
}
所以,我的测试看起来像这样(更新为在utility.js 之前加载requests.js):
var should = require('should'),
Joi = require('joi'),
sinon = require('sinon'),
requests = require('../lib/modules/requests.js'),
utility = require('../lib/modules/utility.js')
;
// Start my tests:
describe('Method', function () {
before(function () {
var fakeAPIresponse = { ... }
sinon.stub(requests, 'makeCallToAPI').yield(null, fakeAPIresponse);
});
it('should produce a well-formed finalObject', function (done) {
utilityClass.methodCreatesObject(function (err, response) {
if (err) {
done(err);
} else {
response.should.do.this.or.that;
done();
}
});
});
});
据我了解,.yields() 应该尝试运行它在参数中检测到的第一个回调并将其自己的参数提供给它(导致doSomethingWithResponse(responseFromAPI, function () {...}))。但是,在运行 mocha 时,我收到一个错误,指出无法访问 API 服务器,这表明正在调用真正的 requests.makeCallToAPI(),而不是我的存根。
我一定错过了什么。我在这里做错了什么?
【问题讨论】:
标签: node.js callback stub sinon