Javascript 使用qunit和sinon测试jquery单击
我的代码中有以下方法:Javascript 使用qunit和sinon测试jquery单击,javascript,unit-testing,sinon,qunit,Javascript,Unit Testing,Sinon,Qunit,我的代码中有以下方法: SignUpEvents = function () { return { Init: function () { $("#payBtn").click(function () { EventTracker.Track("event", "name", "property"());
SignUpEvents = function () {
return {
Init: function () {
$("#payBtn").click(function () {
EventTracker.Track("event", "name", "property"());
});
}
}
}();
$(document).ready(SignUpEvents.Init);
我想测试一下,当点击payBtn
时,调用EventTracker.Track()
方法
以下是我的尝试:
QUnit.module("Sign Up Test");
QUnit.test("Sign up test", function (assert) {
setUpSignUpEvents();
var EventTrackerStub = sinon.stub(EventTracker, "Track");
const $fixture = $("#qunit-fixture");
$fixture.append(htmlPayButton());
$("#payBtn").click();
assert.ok(EventTrackerStub.calledOnce, "EventTracker.Track called");
EventTracker.Track.restore();
});
function setUpSignUpEvents() {
SignUpEvents.Init();
}
function htmlPayButton() {
return '<a id="payBtn">60.00</a>';
}
quonit.module(“注册测试”);
质量测试(“注册测试”,函数(断言){
setUpSignUpEvents();
var EventTrackerStub=sinon.stub(EventTracker,Track);
常量$fixture=$(“#qunit fixture”);
$fixture.append(htmlPayButton());
$(“#payBtn”)。单击();
ok(EventTrackerStub.calledOnce,“调用EventTracker.Track”);
EventTracker.Track.restore();
});
函数setUpSignUpEvents(){
SignUpEvents.Init();
}
函数htmlPayButton(){
返回“60.00”;
}
然而,我得到了一个失败的测试,说“预期为真,但为假”-有人能指出我哪里出了错吗?嗯。。。看起来您在将按钮添加到DOM之前调用了
setUpSignUpEvents
,因此单击处理程序将永远不会注册。您可能只需要重新排序即可:
QUnit.test("Sign up test", function (assert) {
const $fixture = $("#qunit-fixture");
$fixture.append(htmlPayButton());
// NOTE THE SWAP HERE
setUpSignUpEvents();
var EventTrackerStub = sinon.stub(EventTracker, "Track");
$("#payBtn").click();
assert.ok(EventTrackerStub.calledOnce, "EventTracker.Track called");
EventTracker.Track.restore();
});
嗯。。。看起来您在将按钮添加到DOM之前调用了
setUpSignUpEvents
,因此单击处理程序将永远不会注册。您可能只需要重新排序即可:
QUnit.test("Sign up test", function (assert) {
const $fixture = $("#qunit-fixture");
$fixture.append(htmlPayButton());
// NOTE THE SWAP HERE
setUpSignUpEvents();
var EventTrackerStub = sinon.stub(EventTracker, "Track");
$("#payBtn").click();
assert.ok(EventTrackerStub.calledOnce, "EventTracker.Track called");
EventTracker.Track.restore();
});