【发布时间】:2013-01-24 00:17:53
【问题描述】:
我刚开始使用sinon.js,我完全被这个术语难住了。我在subview's 渲染方法中使用了存根。但是spy的解释对我来说不是很清楚。谁能解释这两者之间到底有什么区别?
我还想知道如果我想测试一个新模型是否已添加到集合中,该方法是什么?
【问题讨论】:
标签: jquery backbone.js sinon
我刚开始使用sinon.js,我完全被这个术语难住了。我在subview's 渲染方法中使用了存根。但是spy的解释对我来说不是很清楚。谁能解释这两者之间到底有什么区别?
我还想知道如果我想测试一个新模型是否已添加到集合中,该方法是什么?
【问题讨论】:
标签: jquery backbone.js sinon
我对@987654321@ 不是很熟悉,但是由于这些是通用的 TDD 术语而不是特定于 sinon 的术语,我想我仍然可以回答您的问题。
主要区别在于存根的存在纯粹是为了“通过代码”;除了保存虚拟值和方法之外,存根本身不做任何事情。
另一方面,间谍是检查放入其中的值或调用它们的方法的存根。换句话说,两者的主要区别在于断言语句:存根没有,而间谍有一些(或者它们在测试代码的其他地方存储断言的值)。
换句话说:
var Stub = Backbone.Model.extend();
var stub = new Stub({value: 'test value'});
// This can be fed to any view for testing
var Spy = Backbone.Model.extend({
initialize: function() {
this.on('change:value', this.handleValueChange);
},
handleValueChange: function(value) {
assert(!isNaN(value));
};
value: 'test value'
});
var spy = new Spy({value: 'test value'});
// This can be fed to any view for testing AND it ensures that,
// if that view sets its "value", that that value is a number
哦,回答:
我还想知道如果我想测试一个新模型是否已添加到集合中,该采用什么方法?
再一次,不用专门讨论诗乃,有两个明显的地方可以“窥探”模型:模型本身和它的集合。
您可以将事件处理程序添加到(或硬连线到测试方法中)您的模型,该模型检查this.collection 以确定是否/哪个集合被添加到。相反,您可以在集合本身上绑定一个事件或覆盖一个方法,然后检查this.models。
【讨论】:
add 新集合设置了一个监听器。我为此创建了一个存根,并尝试在触发此事件后检查集合的长度。它在被触发之前和之后仍然显示相同的数字。