私は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」メソッド内にアラート コードを挿入すると、アラートが適切に表示されるので、ブラウザ ウィンドウのサイズ変更イベントが発生したときにコールバックが適切に呼び出されると思います。
理由がわかりませんでした。私のコードに何か問題がありますか?
前もって感謝します。