使用Mocha.js进行Javascript测试:如何在mocha中模拟回调?

时间:2013-12-01 06:40:24

标签: javascript mocha

我的测试:

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模拟。我只是希望不调用此函数并返回回调中的内容

2 个答案:

答案 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.

还要检查其录制功能!

相关问题