解決策が見つからないような問題があります。私は(簡易版)のように、クリックイベントに基づいていくつかのDOMノードのクラスを変更するためにjqueryのを使用するコンポーネントを反応させていカルマ - Jquery:カルマテストでクライアントサイドのJQueryコードを使用するには?
:私はそれをテストするとき
hide() {
if ($('.hidecontrols').hasClass('fa-arrow-left')) {
//hide UI
$('.hidecontrols').removeClass('fa-arrow-left');
$('.hidecontrols').addClass('fa-arrow-right');
} else {
//show UI
$('.hidecontrols').removeClass('fa-arrow-right');
$('.hidecontrols').addClass('fa-arrow-left');
}
}
render() {
return (
<div>
<i onClick={this.hide} className="hidecontrols fa fa-2x fa-arrow-left" aria-hidden="true"/>
</div>
);
}
コードが正常に動作しますブラウザ。私がこのテストでカルマを実行するとき、
it('should HIDE when the hide-arrow is clicked',() => {
var store = configure({});
var provider = ReactTestUtils.renderIntoDocument(
<Provider store={store}><Controls/></Provider>
);
var controls = ReactTestUtils.scryRenderedComponentsWithType(provider, Controls)[0];
var hideArrow = ReactTestUtils.scryRenderedDOMComponentsWithClass(controls, 'fa-arrow-left')[0];
ReactTestUtils
.Simulate
.click(hideArrow);
var unHideArrow = ReactTestUtils.scryRenderedDOMComponentsWithClass(controls, 'fa-arrow-right')[0];
expect(unHideArrow).toExist();
});
テストは失敗します。 this.hide()は、模擬クリックで呼ばれるが、jQueryのrenderIntoDocumentによってレンダリング要素のいずれかを見ることができないので、
if($('.hidecontrols').hasClass('fa-arrow-left'))
は失敗しました。
私はRearmコンポーネントがレンダリングされているにもかかわらず、カルマのブラウザの世界的なコンテキスト(私はクロムを使用していますが、それは重要ではありません)ではjqueryが呼び出されています。
それは実際に選択することになっていたノードを見ることができるようにjqueryのが正しいコンテキストで呼ばれるように取得するにはどのように任意のアイデア?私が検索して見つけたことは、この問題に対処しているようではありません。