假设我们有一个简单的Backbone View,例如:

class MyView extends Backbone.View

    events:
        'click .save': 'onSave'

    onSave: (event) ->
        event.preventDefault()

        # do something interesting


我想测试当我使用event.preventDefault()类在元素上click时调用.save的情况。

我可以测试回调函数的实现,就像这样(Mocha + Sinon.js):

it 'prevents default submission', ->
    myView.onSave()

    myView.args[0][0].preventDefault.called.should.be.true


我认为这行不通,但这只是为了理解这个想法。编写正确的代码,这行得通。我的问题是这样,我在测试实现而不是功能。

所以,我的问题确实是:我如何验证,假设要触发click元素上的.save事件?

it 'prevents default submission', ->
    myView.$('.save').click()

    # assertion here ??


一如既往的感谢:)

最佳答案

尝试在视图的$el上添加侦听器,然后在click上触发.save,然后确认事件未冒泡到视图的元素。

var view = new MyView();
var called = false;
function callback() { called = true; }

view.render();

// Attach a listener on the view's element
view.$el.on('click', callback);

// Test
view.$('.save').trigger('click');

// Verify
expect(called).toBeFalsy();

07-24 17:00
查看更多