0

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

いつもありがとうございます。

4

1 に答える 1

0

問題はジャスミンが ExtLib を認識していないことだと思います。

そのスタック トレースからは、診断が正しいかどうかわかりません。しかし、それを確認するには、Jasmine ランナーのソースを表示し、ランナーのページに ExtLib が含まれているかどうかを確認します。

ExtLib が含まれていない場合、修正は Jasmine の実行方法によって異なります。Jasmine gem を使用していて、jasmine.yml ファイルがある場合は、jasmine.yml を編集して ExtLib を含める必要があります。「単純な」構成で、Jasmine に含まれる Javascript ファイルを手動で管理している場合は、ランナーのソース ファイルに ExtLib を含める行を追加する必要があります。

于 2012-12-07T16:12:55.657 に答える