我的测试:
describe("Something", function() {
it("does the right thing", function(done) {
callExternalApi(["mockData1", "mockData2"], function(err, ajaxResults) {
// how do I mock out the api requests here and return mocked err, and ajaxResults
});
});
});
我的功能:
function callExternalApi(data, callback) {
$.ajax({
...blah..
success: function(ajaxResults) {
callback(null, ajaxResults);
},
error: function(err) {
callback(err, null);
}
})
}
理想情况下,我不想做某种http模拟。我只是希望不调用此函数并返回回调中的内容
答案 0 :(得分:2)
你应该看看Sinon。我已经能够在我的node.js应用程序中使用它。您可以使用它来存根jQuery的ajax
方法,并使存根调用您的回调函数,如下所示:
var stub = sinon.stub(jQuery, "ajax");
stub.yieldsTo("success", [{ foo: "bar" }]);
完成后,请不要忘记使用stub.restore()
恢复存根。
请查看the docs以获取更多高级用法。
答案 1 :(得分:2)
Checkout https://github.com/pgte/nock它提供了一种简单而干净的方法来通过直接截取来模拟对http请求的响应!
例如,如果您的应用程序调用www.api.somesite.com/items/item7,您可以在测试之前简单地定义它:
var nock = require('nock');
var item7 = require('./item7.json');
var scope = nock("www.api.somesite.com").get("/items/item7").reply(200, item7);
//Your test here.
还要检查其录制功能!