这是我的代码片段
(function(){
var BootModel = Backbone.View.extend();
var BootApp = Backbone.View.extend({
initialize : function(options) {
//some logical code
},
render : function() {
//some more logical code
}
});
new BootApp({
aggregatedEvent : _.extend({}, Backbone.Events),
model: new BootModel()
});
})();
现在你可以看到我的 View 中有逻辑代码,我需要使用 Jasmine 测试这些 View ,但在我的情况下一切都在私有(private)范围内(我这样做是为了防止从外部开发工具访问我的代码像 Firebug 和修改我的模型或任何属性状态)
我尝试了很多东西来研究 Sinon 以了解我是否可以使用 Spy,但对我来说没有任何效果
类似的问题可能是:Anonymous function in Coffeescript how to test it
我想了解哪里出了问题? 我将所有内容隐藏在匿名函数中的方法是错误的吗? 如果是,那么这种实现的最佳做法是什么? 如果否,那么我将如何测试这种代码
PS:我不赞成后门操纵。
在此先感谢您的帮助
最佳答案
spy 替换了它正在监视的函数,所以这样使用它:
describe("Backbone View Tester", foo)
function foo()
{
it('should work' , bar)
}
function bar()
{
spyOn(foo, 'setbar');
spyOn(foo, 'setbaz').and.callThrough();
foo.setbar = function()
{
var BootModel = Backbone.View.extend();
var BootApp = Backbone.View.extend({
initialize : function(options)
{
//some logical code
},
render : function()
{
//some more logical code
}
};
foo.setbaz = new BootApp(
{
aggregatedEvent : _.extend({}, Backbone.Events),
model: new BootModel()
});
};
foo.setbar();
foo.setbaz();
expect(_.extend).toHaveBeenCalled();
expect(Backbone.View.extend).toHaveBeenCalled();
}
引用资料
关于使用 Jasmine 和 Sinon 在匿名函数中测试 Backbone 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19268445/