バックボーンマリオネットに基づいて、外部ライブラリ(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をスパイするにはどうすればよいですか?
いつもありがとうございます。