Как с помощью Jest проверить что был вызван alert

306
11 ноября 2021, 02:40

Как с помощью Jest проверить что после нажатия кнопки был вызван alert c определенным текстом?

Попыталась сделать вот так:

  it('should display an alert when the user tries to add empty value', () => {
    jest.setTimeout(100000);
    page.alert = jest.fn(text => text);
    const addButtonSelector = '#root > div > div > div.ToDoInput > button';
    expect(page).toClick(addButtonSelector);
    expect(page.alert).toHaveBeenCalledWith('Please enter a todo!');
  })

Но тест Failed, потому что алерт никогда не был вызван. Хотя на самом деле алерт вызывается.

Answer 1
it('should handle the click event', () => {
      window.alert = jest.fn();
      const output = shallow(
        <Link title="mockTitle" url="mockUrl" />
      );
      output.simulate('click');
      expect(window.alert).toHaveBeenCalledWith('Кликнули по ссылке!');
    });

Попробуйте один из вариантов.

  1. Вместо window.alert написать global.alert

  2. Добавить в обьект globals обьект window в package.json вашего проекта

    "jest": {
      "verbose": true,
      "preset": "react-native",
      "setupFiles": ["./jest/setup.js"],
      "testRegex": "(/tests/.*|\\.(test|spec))\\.(ts|tsx|js)$",
      "transformIgnorePatterns": [
        "node_modules/(?!(jest-)?react-native|lottie-react-native)"
      ],
      "globals": {
        "window": {}
      }
    }
    

3.В файле где вы пишете тест

import { JSDOM } from 'jsdom'
const { window } = new JSDOM()
global.window = window
READ ALSO
Как получить значения свойств объекта при помощи for in loop?

Как получить значения свойств объекта при помощи for in loop?

Есть функция, которая в результате выдает объект с датами

167
Удалить подстроку из строки

Удалить подстроку из строки

Как поправить код, чтобы удалялось https:// и http://, а не только https:// ?

180
Записываются данные только из одного инпута React js

Записываются данные только из одного инпута React js

После ввода данных в инпут , в стейт записывается значение "compiled" так же для title , те если вводить false то и в title оказывается false , хотя там вводилось...

120