我有一个观点,他扩展了一个外部库(我们称之为 ExtLib),它也基于骨干木偶。基本上,这个库是共享行为的通用视图的包装器(例如,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...
我认为问题在于 jasmine 不知道 ExtLib。如何监视该 renderFieldView 以避免错误?
预先感谢,一如既往。