2

私はbackbonejs、requirejsを使用してJavaScriptアプリを作成しています。

また、jasmine、sinonjs、jasmine-sinon プラグインを使用してアプリケーションをテストしていますが、spy の使用に問題があります。

スパイされたメソッドは適切に呼び出されますが (確かに)、ジャスミンのテスト結果は、メソッドが呼び出されていないことを示しています!


ブラウザ ウィンドウのサイズ変更イベントのコールバックを持つバックボーン ビューがあります。

私がやりたいことは、ウィンドウのサイズ変更イベントが発生したときに「windowResizeCallback」関数を呼び出す必要があることをテストすることです。

これが私のバックボーン ビュー コードです。

define([
    'jquery',
    'use!underscore',
    'use!backbone',
    // other dependencies..
], function (
    $,
    _,
    Backbone,
    // other dependencies..
) {

    var MyView = Backbone.View.extend({

        initialize: function () {
            // do initialization
            var self = this;
            $(window).resize($.proxy(self.windowResizeCallback, self));
        },

        windowResizeCallback: function () {
            // do my business..
            this.otherFunction();
        },

        otherFunction: function () {
            // function called by window resize callback
        }

        // other properties, functions, ..

    });

    return MyView;
});

これが私のテストコードです。

<script type="text/javascript" src="path/to/jasmine.js"></script>
<script type="text/javascript" src="path/to/sinon.js"></script>
<script type="text/javascript" src="path/to/jasmine-sinon.js"></script>
<!-- other scripts.. -->
<script type="text/javascript>
define([
    'view/myView'
], function (
    MyView
) {

    describe('view.MyView', function () {

        beforeEach(function () {
            this.view = new MyView();
            sinon.spy(this.view, 'windowResizeCallback');
        });

        afterEach(function () {
            this.view.windowResizeCallback.restore();
        });

        describe('MyView.windowResizeCallback', function () {

            beforeEach(function () {
                this.view.windowResizeCallback.reset();
            });

            it('callback should be called when window resize event fired', function () {
                $(window).trigger('resize');
                expect(this.view.windowResizeCallback).toHaveBeenCalled();
                // above test fails !!!!
            });

        });
    });

});
</script>

テストコードを渡せばいいと思うのですが、エラーで失敗します

Expected Function to have been called.

「windowResizeCallback」メソッド内にアラート コードを挿入すると、アラートが適切に表示されるので、ブラウザ ウィンドウのサイズ変更イベントが発生したときにコールバックが適切に呼び出されると思います。

理由がわかりませんでした。私のコードに何か問題がありますか?

前もって感謝します。

4

1 に答える 1