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();
});