間違った探索生活-Jest


Global object mocking


何があったの?


事のいきさつはこうだ.グローバルオブジェクトのPropertyなので、どこでも使えるオブジェクトを1つの素子で模倣しています.残りの部品にもエラーが相次いだ.動作をテストするたびに、エラーが発生するテストも異なります.

どうやって解決したの?


まず,すべての素子で模倣する必要はない.この構成部品を使用する親構成部品に同じmochingを追加するだけで、すべての警告が消えます.

Overrapping act calls


何があったの?



問題点

  it('get next question when user click yes or no button', () => {
    const { getByText } = render(<YesNoContainer />);

    [yesButton, noButton].forEach(async (button) => {
      dispatch.mockClear();

      fireEvent.click(getByText(button));

      await waitFor(() => { // <---- 여기서 발생한다. 
        expect(dispatch).toBeCalledWith(stopYesNoQuestion());
        // expect(dispatch).toBeCalledWith(getNextYesNoQuestion());
        // expect(dispatch).toBeCalledWith(idlePlaying());
      });
    });
  });

どうして起こるの?


文字通り、waitForの過剰使用は許されないからです.
forEachを呼び出すと、waitForがネストされて呼び出されます.待つことがあるのではなく、もう一度呼ぶのを待っています!