如何使用mocha和sinon测试Ajax请求?
这是一个名为testApp的类中的初始化函数:
testApp.prototype.initialize=function() {
$.get(....);
}
如果我说,在测试中
sinon.stub($,"get", function(d,e) {});
var test = new testApp();
此行抛出错误$未定义。
我正在使用咕噜声来运行mochatests。
我尝试使用$和jQuery。但我总是将变量视为未定义。
有人可以为此提供帮助吗?
答案 0 :(得分:0)
这是在Node环境中测试的单元测试解决方案。因此,我使用jsdom
为jQuery
提供了一个模拟窗口。否则,$.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