Как издеваться или утверждать, что window.alert запустил React & Jest с машинописью? - PullRequest
0 голосов
/ 01 мая 2019

Я использую шутливые тесты для тестирования моего проекта React, написанного в #typescript, созданном с помощью Create React App. Я использую react-testing-library. У меня есть компонент формы, который показывает alert, если форма отправлена ​​пустой. Я хотел проверить эту функцию (возможно), шпионя / издеваясь над window.alert, но она не работает.

Я пытался использовать jest.fn(), как предлагается во многих ответах SO, но это тоже не работает.

window.alert = jest.fn();
expect(window.alert).toHaveBeenCalledTimes(1);

Вот как я это реализовал: Form.tsx

async handleSubmit(event: React.FormEvent<HTMLFormElement>) {
   // check for errors
    if (errors) {
        window.alert('Some Error occurred');
        return;
    }
}

Вот как я создал тест библиотеки React + Jest + реагировать на тестирование библиотеки: Form.test.tsx

it('alerts on submit click', async () => {
  const alertMock = jest.spyOn(window,'alert'); 
  const { getByText, getByTestId } = render(<Form />)
  fireEvent.click(getByText('Submit'))
  expect(alertMock).toHaveBeenCalledTimes(1)
})

1 Ответ

0 голосов
/ 01 мая 2019

Вы можете попробовать использовать global вместо window:

global.alert = jest.fn();
expect(global.alert).toHaveBeenCalledTimes(1);

В качестве альтернативы попробуйте Object.assign

const alert = jest.fn()
Object.defineProperty(window, 'alert', alert);
...