间谍和存根有什么区别?

时间:2013-01-24 00:17:53

标签: jquery backbone.js sinon

我刚刚开始使用sinon.js,我完全被术语所困扰。我使用了存根,其中subview's渲染方法被删除了。但是对间谍的解释并不清楚。任何人都可以解释这两者之间究竟有什么区别?

还想知道如果我想测试一个新模型是否已添加到集合中会采用什么方法?

1 个答案:

答案 0 :(得分:8)

我对sinon.js并不十分熟悉,但由于这些是一般的TDD术语,而不是特定于偏见的术语,我想我仍然可以回答你的问题。

主要区别在于存根纯粹是为了“通过代码”;除了保存虚拟值和方法之外,存根本身不会做任何事情。

另一方面,间谍是存根,用于检查放入其中的值,或者调用它们的方法。换句话说,两者之间的主要区别是断言语句:存根没有,而间谍有一些(或者它们存储测试代码中其他地方的断言值)。

换句话说:

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

哦,回答:

  
    

还想知道如果我想测试一个新模型是否已添加到集合中会采用什么方法?

  

同样,如果没有专门进入Sinon,有两个明显的地方你可以“窥探”模型:模型本身及其集合。

您可以向模型添加事件处理程序(或硬连接到测试方法),模型检查this.collection以确定是否添加了哪个集合。相反,您可以绑定事件或覆盖集合本身的方法,并检查this.models