1

Jasmine と Sinon を使用してバックボーン アプリケーションをテストしていますが、問題が発生しています。ビューが初期化されたときに render が呼び出されることをテストしようとしています

私は次のビューを持っています:

var MyView = Backbone.View.extend({
    el: '#myElement',
    initialize : function() {
        var that = this;
        this.collection.fetch({
            error : function() {
                alert("error!");
            },
            success : function() {
                that.render();
            }
        });
    },

    render : function() {
        this.collection.each(this.renderItem);
    }

    ...

私のテスト

it('Should call render when view is instantiated', function(){          
                spyOn(MyView.prototype, 'render');
                var myCollection = new MyCollection();
                this.view = new MyView({collection: myCollection});
                expect(MyView.prototype.render).toHaveBeenCalled();
        });

問題は、フェッチの成功コールバックが実行される前に、expect() が呼び出されることです。これを解決する最善の方法は何ですか?

4

1 に答える 1

2

ここでの問題は、ビューとコレクションの 2 つをテストすることです。コレクションをスタブして、ビューをテストするだけです。

sinon.stub(myCollection, 'fetch').yieldsTo('success') // will immediately call the success methode
sinon.stub(myCollection, 'each').callsArg(0) // will immediately call this.renderItem

また、テストしたいクラスをスパイするのは良い考えではありません。あなたの場合、this.renderItem呼び出された後にビューのinnerHTMlが期待どおりに変更されたことをテストする必要があります

于 2013-04-05T08:42:30.260 に答える