まだPrototypeJSを使用していて、 jasmineとjasmine-prototypeプラグインを使用してカスタムイベントをテストしたい人のためにこれを投稿しています。
ユーザーのクリックまたはフォームの送信に基づいてカスタムイベントをトリガーしています。カスタムイベントが正しく発生することをテストする簡単な方法が必要でした。
次に例を示します。
var CustomEventsDispatcher = ( function() {
function init(){
//if elements exists
if($$('a.trigger_bomb')) {
// Observe the elements
$$(elements).each(function(element) {
element.observe('click', function(e) {
this.fire("bomb:explode", {})
});
});
}
return {'init' : init};
})();
Webで利用可能なリソースを使用して、フィクスチャを作成しました...
// spec/fixtures/links.html
<a class="trigger_bomb" href="#"> Trigger Bomb </a>
...およびテストスイート:
//spec/trigger_bomb_spec.js
describe("Trigger Bombs", function() {
beforeEach(function(){
loadFixtures("links.html")
CustomEventsDispatcher.init();
})
it("should raise the custom event", function(){
var element=$$('a.trigger_bomb').first();
spyOnEvent(element, 'click');
element.click();
expect('click').toHaveBeenTriggeredOn(element);
expect('bomb:explode').toHaveBeenTriggeredOn(element);
});
});
最初のアサーションは正常に機能しますが、2番目のアサーションは機能しません。その理由は、spyOnEvent
クリックイベントの処理方法を変更するためですelement
。