使用Jasmine在对象上测试事件处理程序



我有一个类,比如:

MyClass = function() {
    var view = {
        delegateEvents: function () {
            this.$el.on('click', 'input[type="radio"]', this.toggleServices);
        },
        toggleServices: function () {
            …
        },
        render: function () {
            blah-blah-blag (rendering the view)…
            this.delegateEvents();
        }
    };
    view.init();
    return view;
}

(我如何获得$el超出了问题的范围,但要确保它有效)我正在Jasmine中测试这个类的一个实例:

it('it handles clicks on radio buttons', function () {
    var view = new MyClass();
    view.render();
    spyOn(view, 'toggleServices');
    view.$('input[type="radio"]').eq(0).click();
    expect(view.toggleServices).toHaveBeenCalled();
});

现在的问题是,在测试中,没有调用spy,但代码进入了类的原始toggleServices(),而不是spy。我似乎不明白如何创建一个间谍,在init()中向this.toggleServices发出请求。

有什么建议吗?

您应该在设置侦听器之前进行监视,换句话说,只需在调用呈现之前进行监视。

it('it handles clicks on radio buttons', function () {
    var view = new MyClass();
    spyOn(view, 'toggleServices');
    view.render();
    view.$('input[type="radio"]').eq(0).click();
    expect(view.toggleServices).toHaveBeenCalled();
});

相关内容

  • 没有找到相关文章

最新更新