如何窥探使用Jasmine扩展外部库的Marionette视图

时间:2012-12-07 14:33:38

标签: javascript testing bdd jasmine marionette

我有一个视图,它扩展了一个外部库(我们称之为ExtLib)也基于主干木偶。基本上这个lib是共享行为的公共视图的包装器(例如DetailsView,FormView等)。所以,让我说我有这样的事情:

MyApp.module('Views', function(Views, App, Backbone, Marionette, $, _) {

    Views.MyDetailsView = Marionette.ExtLib.DetailsView.extend({
        options: {
            fields: [
                // ...
            ],
            myFunction: function() {
                // ...
            }
        }
    });    
});

在我的Jasmine测试中,我调用了一个创建MyDetailsView实例的控制器方法。

it('does what it should', function() {
    // ...

    controller.showDetails();

    // my expectations
});

实际上,控制器中的方法只是创建视图并将其渲染(进入布局的区域)。

showDetails: function(story) {
    var container = new App.Layouts.DetailsLayout();
    var myDetailsView = new App.Views.MyDetailsView({
        model: story
    });

    container.details.show(storyDetailsView);
}

最后,这是我得到的错误:

TypeError: Cannot read property 'length' of undefined
at eval (eval at <anonymous> (http://localhost:8080/myapp/js/lib/underscore/underscore-min.js?_debugResources=y&n=1354890505115:30:350), <anonymous>:17:35)
at c (http://localhost:8080/myapp/js/lib/underscore/underscore-min.js?_debugResources=y&n=1354890505115:30:430)
at Object.Backbone.Marionette.Renderer.render (http://localhost:8080/myapp/js/backbone-app/conf/renderer.js?_debugResources=y&n=1354890505115:9:17)
at r.ItemView.r.View.extend.render (http://localhost:8080/myapp/js/lib/backbone/backbone.marionette.min.js?_debugResources=y&n=1354890505115:13:4719)
at  Backbone.Marionette.ExtLib.ExtLib.DetailsView.Backbone.Marionette.View.extend.renderFieldView (http://localhost:8080/myapp/js/lib/backbone.marionette.extlib.min.js?_debugResources=y&n=1354890505115:395:14)
// etc...

我认为问题在于茉莉花不了解ExtLib。我如何监视renderFieldView以避免错误?

提前感谢,一如既往。

1 个答案:

答案 0 :(得分:0)

  

我认为问题在于茉莉花不了解ExtLib。

我无法从堆栈跟踪中判断出您的诊断是否正确;但要验证这一点,您可以在Jasmine运行器上查看源代码,看看是否在运行器页面中包含了ExtLib。

如果ExtLib包含 ,则修复程序取决于您运行Jasmine的方式。如果您正在使用Jasmine gem并且您有一个jasmine.yml文件,那么您需要编辑jasmine.yml以包含ExtLib。如果您有一个“简单”的配置并且手动维护Jasmine包含的Javascript文件,那么您需要添加一行以将ExtLib包含在跑步者的源文件中。