茉莉花间谍和如何使用间谍一般
Jasmine spyOn and how to use spies generally
我刚开始接触JS单元测试,很难理解如何用Jasmine spies创建有意义的测试。
it('should take an array of shopping items', function() {
spyOn(checkObj, 'getTotal');
checkObj.getTotal([1, 2, 3]);
expect(checkObj.getTotal).toHaveBeenCalledWith(jasmine.any(Array));
});
使用上面我创建的测试摘录作为一个例子,我看不出这是一个有用的测试,因为我对getTotal的调用在规范中是硬编码的,但同时我想确保传递的参数是一个数组,而不是其他类型…这是硬编码,我肯定是错误的。
有没有人可以提供一些指导,告诉我应该如何思考/处理这种类型的测试场景
好吧,间谍在不同的情况下是有用的。这在很大程度上也取决于您自己如何定义单元测试的范围。如果你做尽可能少的单元(即方法),那么让我们想象如下:
var x = function() { }
x.prototype.f1 = function() {
//do something
},
x.prototype.f2 = function(){
// do something else
this.f1();
}
现在,在f2的单元测试中,您对f1的内部工作方式不感兴趣。所以,你对它做了一个间谍:
var a = new x();
a.f1 = jasmine.createSpy("spy-on-f1");
expect(a.f1).not.toHaveBeenCalled();
a.f2();
expect(a.f1).toHaveBeenCalled();
例如,对于angularjs应用程序,我经常用间谍模拟整个服务,只是为了在测试中隔离算法。
作为额外的好处,你实际上可以用一些伪函数代替真正的调用,像这样:
a.f1 = jasmine.createSpy("fake-spy").and.callFake(function(){
// do something predictible or return global variable that can be set externaly
});
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 什么'与Jasmine相比,使用Sinon.js的优势是什么;内置于间谍
- 使用sinon.js创建一个“;“间谍对象”;使用基于真实构造函数/原型的间谍方法
- 如何断言间谍是使用jasmine通过点击事件调用的
- 使用子菜单具体化滚动间谍
- 在Javascript(Jasmine/Mocha)中使用间谍的方法中测试类实例化
- 使用间谍进行茉莉花测试,$httpBackend不起作用
- jQuery.queue() 与使用回调函数完成某事有何不同
- 在茉莉花中使用间谍
- 使用用于在同一函数中命名函数的变量名称有何意义
- 尝试使用茉莉花间谍并得到“不是函数”错误
- 使用推特引导滚动间谍
- backbone.js点击事件间谍不会使用jasmine.js和sinon.js调用
- 使用具有动态函数绑定的测试间谍的好方法
- 为什么要使用 jQuery $(window).ready(),它与 $(window).load() 有何不同
- 在私人方法上使用茉莉花间谍
- 引导3.1附加滚动间谍内容保持可见时,使用溢出
- 手动调用模块与使用browserify动态调用模块有何不同?
- 茉莉花间谍和如何使用间谍一般
- 在 JavaScript 中使用重排隐藏元素,它与 CSS 隐藏属性有何不同