私のメソッドに対するスパイの例は、「spy handle_clickが呼び出されたと期待されています。それが通過すべきとき。しかし、コンソールログ "Foo handle_click called!"が表示されているので、呼び出されていることがわかります。プロトタイプのメソッドでJasmineのspyOn toHaveBeenCalledに関する問題
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:ジャスミン-sinon
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();
});
私は、ジャスミン-1.2.0を使用していますジャスミン-htmlとジャスミン-jqueryのではなく、少なくとも私はそこにバンドルされているとは思わない。どんな助けでも大歓迎です!
更新 これは以下のとおりです。しかし、私は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();
});
ニース!私のjQueryプラグインにプロトタイプを追加したので、それをインスタンス化する前にスパイを割り当てることができました。 '$ .fn.foo = function(options){return new Foo(this、options || {}); }; ' ' $ .fn.foo = Foo.prototype; ' ありがとう! –