gpt4 book ai didi

使用 Jasmine 在 Backbone JS 中测试模型绑定(bind)

转载 作者:行者123 更新时间:2023-11-28 19:55:08 25 4
gpt4 key购买 nike

我有一个包含模型的 View 。 View 监听来自模型的事件,并在触发事件后执行操作。下面是我的代码

window.Category = Backbone.Model.extend({})

window.notesDialog = Backbone.View.extend({
initialize: function() {
this.model.bind("notesFetched", this.showNotes, this);
},
showNotes: function(notes) {
//do stuffs here
}
})

我想使用 Jasmine 对此进行测试,下面是我的测试(不起作用)

it("should show notes", function() {
var category = new Category;

var notes_dialog = new NotesDialog({model: category})

spyOn(notes_dialog, "showNotes");
category.trigger("notesFetched", "[]");
expect(notes_dialog.showNotes).toHaveBeenCalledWith("[]");
})

有谁知道为什么上面的测试不起作用?我得到的错误是“预期 spy showNotes 已使用 ['[]'] 调用,但从未调用过。”

最佳答案

我在有 View 的地方做了类似的事情,但我无法让 spy 正常工作,除非我将它添加到原型(prototype),并且在我创建 View 实例之前。

以下是最终对我有用的方法:

view.js

view = Backbone.View.extend({
initialize: function(){
this.collection.bind("change", this.onChange, this);
},
...
onChange: function(){
console.log("Called...");
}
});

jasmine_spec.js

describe("Test Event", function(){
it("Should spy on change event", function(){
var spy = spyOn(view.prototype, 'onChange').andCallThrough()
var v = new view( {collection: some_collection });

// Trigger the change event
some_collection.set();

expect(spy).toHaveBeenCalled()
});
});

我最初会使用 toHaveBeenCalled() 期望进行测试,并在你开始工作后更改为 toHaveBeenCalledWith()...

2013 年 5 月 6 日更新:将 update() 更改为 set()

关于使用 Jasmine 在 Backbone JS 中测试模型绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com