2016-05-12 6 views
2

との結合をクリックしてください:私は一緒にノックアウト・テンプレートとジャスミンのテストで問題を抱えているジャスミン

HTMLは次のようになります。

<body> 
<my-widget params="value: $data></my-widget> 
</body> 

ウィジェットは、クリック結合を持っています

ko.components.register('my-widget', { 
    viewModel : function(params) { 
     this.doSomething = function() { 
       // doing something 
     }; 
    }, 
    template: { 
     require: 'text!../../templates/my-widget.html' 
    } 
}); 

<div class="my-widget"> 
    <a id="#clickme" data-bind="click: doSomething">Click me</a> 
</div> 

ウィジェットはJavaScriptがこのようなものです

これはすべて完全に動作しますが、Jasmine/Jqueryでは$( '#clickme')をクリックするとdoSomethingは実行されません。私はそれが存在していることがわかります#clickme要素をconsole.loggingとき

beforeEach(function (done) { 
    require(['specHelpers', 'knockout'], 
     function (specHelpers, knockout) { 
     specHelpers.loadFixtureIntoPage("page.html", "myPage"); // template and id to use 
     expect($('#myPage')).toExist(); 
     done(); 
    }); 
}); 


it("WILL NOT TRIGGER MY CLICK", function (done) { 
    ko.applyBindings(myPage.pageViewModel, $('#myPage'))[0]); 

    setTimeout(function() { 
     $('#clickme').click(); 

     // doSomething is not called :(

     done(); 
    }, 300); 
}); 

次は私のジャスミンテスト(それが大幅に簡素化されていますが、必需品が含まれている必要があります)からの抜粋です。

ウィジェットのクリックバインドが適切に適用されないようです。しかし、私はbddでテストを実行し、それが終わって失敗しました - 私は手動でこの要素をクリックし、doSomethingが呼び出されます。

私は間違っていますか?私が言ったように、実際のアプリケーションの実行は完全に機能します。 jasmineはクリックバインドを正しく処理できないようです - 私はdocument.readyに設定されている通常のクリックイベントにこの問題はありません。

+0

あなたの問題を再現しようとしましたが、できませんでした.. https://jsfiddle.net/9qb1936v/私は何を欠席しましたか? – user3297291

+0

問題は、フィクスチャ、すなわちノックアウトウィジェットを含むHTMLが動的にロードされるジャスミン仕様で動作しているときに発生します。 –

答えて

0

あなたは本当にそのようなボタンのクリックをテストすべきではありません。関数doSomething()を直接呼び出すだけで、より確実になります。 JQueryの内部を自分でテストしないのと同じ方法です。

あなたが本当にフィクスチャ上のイベントをテストする場合は、また、(ブラウザ経由言う)そのフィクスチャを使用すると、テストをデバッグするときにDOMに挿入されているチェック

ダブルをちょうど

$("#clickme").trigger('click'); 

を試してみました

+0

同じ結果を試しました。そして、はい、その備品はそこにあります。クリックしたい要素のConsole.logにこれが表示されます。そこにないのはノックアウトで追加されるクリックイベントだけです。私はjqueryを介して他のものを追加することができ、彼らは正常に動作します。 –

+0

関数を直接テストすることについては、これまでに行っていましたが、リファクタリング中に誤って壊れたものをキャッチしないテストにつながったのです。それが私たちがむしろクリック自体をテストする理由です。 –

+0

ああ、私は理解しています。 :) ko.applyBindingsがどのように設定されているかは、 – kasperoo

関連する問題