2012-01-11 66 views
3

测试我的骨干模型的触发方法时,我得到了一个奇怪的错误。下面是我的代码:茉莉花测试骨干模型的触发方法

Category = Backbone.Model.extend({ 
    fetchNotes: function() { 
    this.trigger("notesFetchedEvent"); 
    } 
}) 

describe("Category", function() { 

it("should fetch notes", function() { 
    var category = new Category; 
    spyOn(category, "trigger"); 
    category.fetchNotes(); 
    expect(category.trigger).wasCalledWith("notesFetchedEvent"); 
}) 

}) 

我得到的错误是“预期间谍触发已经调用[‘notesFetchedEvent’],但被称为与...... jibberish ......”。有谁知道如何解决这一问题?谢谢。

+0

在jasmine1.1.0-rc1下正常工作也许有些东西导致了javascript错误?检查你的控制台。 – Gazler 2012-01-11 21:32:47

+0

您是否可以使用'expect(category.trigger).toHaveBeenCalledWith(“notesFetchedEvent”)'来尝试它,因为'wasCalledWith'已弃用。 – 2012-01-11 21:33:02

+0

toHaveBeenCalledWith不适用于我。上面的代码只是示例代码来说明我的观点。我的完整代码是在http://pastie.org/private/ttkougq7n7jg4zx3hliq(category模型)和http://pastie.org/private/uh4dxauteb7qvt6pgkp1hq(测试) – 2012-01-11 21:43:06

回答

4

我发现通常测试事件触发的最好方法是在事件中注册一个侦听器作为侦听器之一,而不是直接监听触发器方法。这看起来像这样:

describe("Category", function() { 
    it("should fetch notes", function() { 
    var category = new Category(); 
    var spy = jasmine.createSpy('event'); 
    category.on('notesFetchedEvent', spy); 
    category.fetchNotes(); 
    expect(spy).toHaveBeenCalled(); 
    }); 
});