初期化されると、panと呼ばれる別のメソッドを呼び出す別のメソッドを呼び出すクラスがあります。panメソッドが呼び出されたことをテストしようとしています。クラスはそれよりも複雑ですが、私がテストしようとしているのはパンが呼び出されただけです。
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.pan = this.pan.bind(this);
}
componentDidMount() {
initExternals();
}
initExternals() {
.. bla bla
this.pan();
}
pan() {
console.log('Function was called');
}
}
これが私のテストクラスです
test('component should call initMap', () => {
const spy = jest.spyOn(WhereWeAreMap.prototype, 'pan');
const component = mount(<WhereWeAreMap />);
expect(spy).toHaveBeenCalled();
});
I have also tried.
test('component should call initMap', () => {
const component = mount(<WhereWeAreMap />);
const spy = jest.spyOn(component.instance(), 'pan');
wrapper.instance().forceUpdate();
expect(spy).toHaveBeenCalled();
});
コンポーネントメソッドpanをテストできないため、私のテストで何が問題になっていますか?expect(spy).toHaveBeenCalled()と呼ばれます。ログはそれが呼び出されたことを示していますが、私のテストは異なって表示されます。
モック関数が呼び出されることを期待していましたが、呼び出されませんでした。
最初のテスト方法は私にとって間違いなく機能するものであり、ATMを実行しているテストにすぐに追加され、問題ありません。
it('adds the correct scroll blocking class to document.body', () => {
const spy = jest.spyOn(BlockUI.prototype, 'foo');
const instance = mount(<BlockUI />).instance();
// some suggest you need to do this but works without it.
// instance.forceUpdate();
const body = instance.document.body;
expect(body.className).toMatchSnapshot();
expect(spy).toHaveBeenCalled();
});
BlockUI.prototype.foo
参照を追加しdocument.body
、インスタンスへとニーズがアンマウントに削除することをそれにクラスを追加します。
上記の設定は次の場合に問題ありません。
"enzyme": "3.7.0",
"enzyme-adapter-react-16": "1.7.1",
"enzyme-to-json": "3.3.4",
"jest": "23.6.0",
以前は酵素なしで、または古いバージョンでこれを機能させるのに苦労しましたが、今は問題ありません。
問題を引き起こす可能性のある非同期のものには例外があります-スパイを使用するのではなく、呼び出されたことを確認したいメソッドの結果を確認することをお勧めします。酵素で浅いレンダラーを使用しない場合、ライフサイクルメソッドが呼び出されることが保証されています
pan
プロトタイプからローカルにバインドされたコピーを保存することにより、コンストラクター内のインスタンスのメソッドを変更していますが、それでもプロトタイプを呼び出し、スパイがそれをキャッチする必要があります。私はあなたが何かの古いバージョンを使用していることを期待しています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加