使用 Jasmine 和 Sinon 在匿名函数中测试 Backbone 代码

标签 testing backbone.js bdd jasmine sinon

这是我的代码片段

(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/

相关文章:

java - 提供测试作为库的一部分

ruby-on-rails - 为什么我的 Rails 测试看不到内存中 SQLite3 数据库的内容?

java - 使用 Maven 自动化测试构建过程

javascript - Backbone.js 什么都不渲染,除非手动

model - Backbone JS:如何禁用删除同步?

python - 生菜、 Django 的背景

http - 共享 api 响应的 whurl 替代方案

javascript - 如何在自定义异步函数中使用 jQuery Promise?

python - 在场景大纲之前运行某些步骤一次 - Python Behave

ruby-on-rails - 功能规范和 View 规范之间有什么区别吗?