Mocha Sinon测试ajax请求(在Node中)

时间:2016-06-16 19:32:19

标签: javascript node.js mocha sinon chai

如何使用mocha和sinon测试Ajax请求?

这是一个名为testApp的类中的初始化函数:

 testApp.prototype.initialize=function() {
  $.get(....);
}
如果我说,

在测试中

sinon.stub($,"get", function(d,e) {});
var test = new testApp();

此行抛出错误$未定义。

我正在使用咕噜声来运行mochatests。

我尝试使用$和jQuery。但我总是将变量视为未定义。

有人可以为此提供帮助吗?

1 个答案:

答案 0 :(得分:0)

这是在Node环境中测试的单元测试解决方案。因此,我使用jsdomjQuery提供了一个模拟窗口。否则,$.ajax$.get方法将是undefined

index.js

const $ = require("./jquery");

function TestApp() {}

TestApp.prototype.initialize = function() {
  $.get("https://github.com/mrdulin");
};

module.exports = TestApp;

jquery.js

var jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = new JSDOM("").window;
global.document = document;

var $ = require("jquery")(window);

module.exports = $;

index.spec.js

const $ = require("./jquery");
const sinon = require("sinon");
const TestApp = require(".");

describe("TestApp", () => {
  it("should initialize", () => {
    const getStub = sinon.stub($, "get");
    const test = new TestApp();
    test.initialize();
    sinon.assert.calledWith(getStub, "https://github.com/mrdulin");
  });
});

覆盖率100%的单元测试结果:

  TestApp
    ✓ should initialize


  1 passing (38ms)

---------------|----------|----------|----------|----------|-------------------|
File           |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
---------------|----------|----------|----------|----------|-------------------|
All files      |      100 |      100 |      100 |      100 |                   |
 index.js      |      100 |      100 |      100 |      100 |                   |
 index.spec.js |      100 |      100 |      100 |      100 |                   |
 jquery.js     |      100 |      100 |      100 |      100 |                   |
---------------|----------|----------|----------|----------|-------------------|

源代码:https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/37867917