【问题标题】:How to test a function call inside a click event with Jasmine如何使用 Jasmine 在点击事件中测试函数调用
【发布时间】:2014-12-19 09:48:03
【问题描述】:

我对 Jasmine 还很陌生,我正在尝试测试一个非常简单的场景

正在测试的代码

$(function () {

    $("#add_distribution_list").click(function () {
        CommonNs.Utils.setWindowLocationHRef("hello.html");
    });

});

夹具

<input type='button' value='Add' id='add_distribution_list'/>

测试

describe("Distribution List Page", function () {
    beforeEach(function(){
        loadFixtures('button.html');
        spyOn(CommonNs.Utils, 'setWindowLocationHRef');
    });

    it("button redirects to action2", function () {
        $('#add_distribution_list').click();
        expect( CommonNs.Utils.setWindowLocationHRef).toHaveBeenCalled();
    });
});

结果

Expected spy setWindowLocationHRef to have been called.

My SpecRunner.html 导入 jquery、jasmine-jquery 和 CommonNs.Utils 所在的实用程序文件。

如何断言 CommonNs.Utils 上的方法已被调用?

【问题讨论】:

    标签: javascript jasmine jasmine-jquery


    【解决方案1】:

    我希望您需要使用 .trigger() 触发“add_distribution_list”上的点击事件

    $('#add_distribution_list').trigger('click');
    

    然后使用 jasmine spy 来监控被调用的方法。

    有一篇很好的帖子 here 用 jasmine 2.x 测试 dom 事件,还有一个关于使用 jasmine 间谍here 的小抄

    有一个类似的问题与 .trigger on jasmine test 相关,这也可能有助于here

    【讨论】:

    • 我也试过'触发'但没有区别。我确实使用间谍来监视该方法,不是吗?
    • 是的,我相信这是对的,使用 spyOn(object, method) 你的控制台有什么错误吗?
    • 我实际上一直在使用该链接!文章中的代码有效,但没有显示如何在点击事件后断言函数已被调用
    • 刚刚更新了我的答案,也许新链接和相关问题会有所帮助
    • 通过将夹具的内容直接移动到 SpecRunner.html 中,使测试通过。显然,正如您的一个链接中所提到的,这是一个与夹具被注入到已经加载的 DOM 并且 Jquery 无法绑定这一事实有关的问题。好像是这样的基本要求……
    猜你喜欢
    • 2013-05-29
    • 2015-07-06
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2016-12-18
    相关资源
    最近更新 更多