【问题标题】:What is the difference between spy and stub?spy 和 stub 有什么区别?
【发布时间】:2013-01-24 00:17:53
【问题描述】:

我刚开始使用sinon.js,我完全被这个术语难住了。我在subview's 渲染方法中使用了存根。但是spy的解释对我来说不是很清楚。谁能解释这两者之间到底有什么区别?

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

【问题讨论】:

    标签: jquery backbone.js sinon


    【解决方案1】:

    我对@9​​87654321@ 不是很熟悉,但是由于这些是通用的 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

    【讨论】:

    • @machineghost.. 感谢您的回复.. 我试图存根绑定到事件侦听器的处理程序,但我仍然无法检查修改后的集合。这里的正确方法是什么.. 使用间谍或存根
    • 通常存根更好,因为更简单的解决方案更好。使用存根,您只需:1. 构建存根,2. 将其传递给某物,3. 针对结果断言;简单的。您只想在以下情况下使用间谍:A) 当您必须使用时(因为您正在测试的内容不会暴露给您的测试代码),或者 B) 当它更方便时(例如,因为您正在做一堆相关的测试都对同一个存根对象做类似的断言)......但这一切似乎无关紧要:听起来你真正的问题是你“无法检查修改后的集合”。你能进一步解释一下吗?
    • 我为add 新集合设置了一个监听器。我为此创建了一个存根,并尝试在触发此事件后检查集合的长度。它在被触发之前和之后仍然显示相同的数字。
    • 经过大量调试,我想我弄清楚到底发生了什么......谢谢:)
    • 很高兴我能帮上忙;有时你只需要用调试器“弄脏你的手”:-)
    猜你喜欢
    • 2020-10-21
    • 2012-11-18
    • 2011-11-12
    • 2016-09-07
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    相关资源
    最近更新 更多