私が書いているコンポーネントは、ctrlが押されたかどうかによって動作を変更する必要があります。Reactjsのテストウィンドウキーダウンイベント
私はwindow.onkeydown
イベントを使用しますが、からSimulate
テストUtilsのは私がwindow
に対してイベントを送出することはできません反応します。私もwindow.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 17 }));
を試しましたが、mocha/nodeはKeyboardEvent
を認識しません。
試験方法はありますかを使用してください。React Test Utils?もしそうでなければ、ノードのためのモカでそれを行うより良い方法はありますか?ここで
は、問題をilustrateするためにいくつかのコードです:
describe('On Keydown',() => {
it('fires the event',() => {
// Component
const Component = class extends React.Component {
constructor(props) {
super(props);
this.state = { key: false };
window.addEventListener('keydown', e => this.setState({ key: true }));
window.addEventListener('keyup', e => this.setState({ key: false }));
}
render() {
return <span>test</span>
};
};
// Rendering
const rendered = renderIntoDocument(<Component/>);
// Firing event
expect(rendered.state.key).to.equal(false);
// Error here
Simulate.keyDown(window, { keyCode: 17 });
expect(rendered.state.key).to.equal(true);
});
});
何compononentは、KeyDownイベントイベントを監視すべきであるという事実をテストについて:
これは私の _test_helper.jsのコードですか?多分それは仕様の一部でなければなりません。そうでなければ、 'addEventListener'を取り除くことができ、コンポーネントは引き続きテストに合格します。 – jokka
有効なポイント。個人的に私はこれらの種類の自動化テストに頼り、単体テストでロジックをテストさせます。 –
十分です。イベントハンドラは基本的にプライベートメソッドであり、テストはそのメソッドに依存しているだけです。しかしそれは大きな問題ではない。 – jokka