メソッドをスパイする私の例は、「Expected spy handle_click to have been called.」で失敗しています。いつ通過すべきか。ただし、「Foo handle_click called!」というコンソール ログが表示されるので、呼び出されていることがわかります。
Foo.js
function Foo() {
this.$btn = $('<a href="#">Foo</a>');
this.$btn.on('click', this.handle_click);
};
Foo.prototype.handle_click = function(evt) {
evt.preventDefault();
console.log('Foo handle_click called!');
};
Foo_spec.js:
it('should be called when trigger is clicked', function() {
var foo = new Foo();
spyOn( foo, 'handle_click' ).andCallThrough();
foo.$btn.click();
expect( foo.handle_click ).toHaveBeenCalled();
});
jasmine-1.2.0、jasmin-html、jasmine-jquery を使用していますが、jasmine-sinon は使用していません。少なくともそこにバンドルされているとは思いません。どんな助けでも大歓迎です!
更新 これは以下で回答されました。ただし、jQuery プラグインの場合の解決策を文書化したい:
Foo.js:
function Foo() { ... }
Foo.prototype.handle_click = function(evt) { ... }
$.fn.foo = function(options) {
return new Foo(this, options || {});
};
$.fn.foo.prototype = Foo.prototype;
Foo_spec.js:
it('should be called when clicked', function() {
spyOn( $.fn.foo.prototype, 'handle_click');
var plugin = $('#selector-for-plugin').foo();
plugin.$btn.click();
expect( plugin.handle_click ).toHaveBeenCalled();
});