いくつかの単体テストを設定し、jsdom構成で酵素の浅い方法でテストします。これは、window.addEventListener
を使用しているコンポーネントに遭遇するまでうまく機能しています。ユニットテストは現在、のエラーを返しています
TypeError: window.addEventListener is not a function
私はテストヘルパーをJSdom用に設定しています
import jsdom from 'jsdom';
...
global.document = jsdom.jsdom('<!doctype html><html><body></body></html>');
global.window = document.defaultView;
global.navigator = {userAgent: 'node.js'};
これは正常に機能していたので、酵素3.xにアップグレードしましたが、このエラーが発生します。
今すぐaddEventListenerを手動でモックする必要があるのでしょうか、それともこれにアクセスするために何か間違っていることがありますか。
document
をあなたと同じようにモックし、テストでaddEventListener()
を使用する必要がある場合は、beforeEach
でモックします。
beforeEach(() => {
document = {
...document,
addEventListener: () => { },
removeEventListener: () => { }
}
})
AddEventListenerがcomponentDidMountで呼び出されているかどうかを確認しようとしたときに同じ問題が発生しました。これは、私にとっては機能しているようです(jest、酵素)
//component
componentDidMount(){
document.addEventListener("keydown", this.handleKeydownOnSearch, false);
}
..。
//in test file ...
it("on component mount we set the keydown listener", () => {
global.document.addEventListener = jest.fn();
wrapper = shallow(<ItemSearch />);
expect(global.document.addEventListener).toHaveBeenCalled();
});
...
//in test file ...
it("should render KeyStrokeHandler", () => {
// Set-up event listener mock
const map = {};
window.addEventListener = jest.fn((event, callback) => {
map[event] = callback;
});
// Mount component that has set callback for keydown event
const wrapper = mount(<KeyStrokeHandler />);
// Trigger keydown event
map.keydown({ key: 'Enter' });
});
...