我正在使用Mocha和Sinon来测试在初始化时是否已将按钮事件侦听器添加到按钮。点击事件在测试中的按钮上触发,但是间谍没有看到它。
我还可以在测试中附加一个click事件监听器 - 间谍会捕获这个,但事件会被触发两次。
所以我猜这是一个参考问题 - 访问对main.myMethod的正确引用 - 并监视它。
任何人都知道我需要做些什么来使这个工作?
var main = (function() {
function init() {
$("#btnGo").on('click', myMethod);
}
function myMethod() {
console.log("myMethod() was called");
return true;
}
init();
return {
init: init,
myMethod: myMethod
}
})();
if (typeof module !== "undefined" && module.exports !== null) {
module.exports = main;
}
/*Test*/
var expect = require("chai").expect;
var sinon = require('sinon');
var jsdom = require("jsdom");
global.document = jsdom.jsdom('<body></body>');
global.window = document.defaultView;
before(() => {
$ = require("jquery");
global.$ = $;
});
describe("Main.init()", function() {
it("should attach a click event listener to the button.", function() {
$("body").html("<button id='btnGo'>Go</button>");
var main = require("../src/main.js"),
spy = sinon.spy(main, "myMethod");
$('#btnGo').trigger("click");
sinon.assert.called(spy);
});
});
答案 0 :(得分:1)
模拟jquery .on()
以获得相同的结果可能更容易,它会更单一。
没试过,但是像:
it("", function(){
var spy = sinon.spy();
$ = function(){
return {
on:spy
}
}
sinon.assert.called(spy);
//test the params as well
});