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

Javascript Testing with Mocha.js: How to mock out a callback in mocha?

本文关键字:Mocha 模拟 回调 进行 js Javascript 测试 使用 何模拟      更新时间:2024-01-14

我的测试:

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模拟。我只想不调用这个函数,并在回调中返回一些东西

您应该看看Sinon。我已经能够在我的node.js应用程序中使用它,效果非常好。您可以使用它来存根jQuery的ajax方法,并使存根调用您的回调函数,如下所示:

var stub = sinon.stub(jQuery, "ajax");
stub.yieldsTo("success", [{ foo: "bar" }]);

完成后,不要忘记使用stub.restore()恢复存根。

查看文档以了解更高级的用法。

结账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.

还可以查看其录制功能!