Как издеваться над модулем в шутку

#javascript #reactjs #unit-testing #jestjs

#javascript #reactjs #модульное тестирование #jestjs

Вопрос:

Я пытаюсь издеваться над одним из моих создателей действий в шутку. На самом деле, я тестирую свой компонент React. И мне нужно проверить, была ли вызвана функция action-creator при каком-то событии. Я пытался издеваться над функцией через jest.mock , но выдает ошибку, говорящую:

 Do not import `@jest/globals` outside of Jest test environment.
  

Вот что я пробовал до сих пор, но это не работает:

 describe('>> SCREEN -- Tests Step1', () => {
  describe('• handleSubmit function tests', () => {
    beforeEach(() => {
      jest.mock('../../redux/modules/test/test', () => ({
        fetchUser : jest.fn()
      }))
    })

    it('Should call fetchUser when called', () => {
      handleSubmit({ value : '1234' })

      expect(fetchUser).toHaveBeenCalledTimes(1)
    })
  })
})

  

Я также пытался издеваться над функцией вне тестовых костюмов. но это тоже не сработало. Я не уверен, чего мне здесь не хватает.

Пожалуйста, дайте мне знать, если вам нужна более подробная информация об этом.

Комментарии:

1. Как вы импортируете и используете fetchUser в своем коде?

2. это частичный импорт. Я импортирую его как: import {fetchUser} from '../../....

Ответ №1:

Один из способов, которым вы можете подойти к нему.

 import * as api from "../../redux/modules/test/test";

test("...", () => {
    const userSpy = jest.spyOn(api, 'fetchUser');

    handleSubmit({ value : '1234' });

    expect(userSpy).toHaveBeenCalledTimes(1);
});
  

Комментарии:

1. Ах, это сработало бы в этом случае. Но теперь проблема в том, что я хочу издеваться над react-redux ‘s useSelector , и я хочу, чтобы он возвращал фиктивное значение. Есть идеи, как это сделать..

2. Сначала вам нужно обернуть свой компонент внутри Redux Provider. После отправки некоторого действия, которое обновляет селектор… Я думаю, вам нужно обновить пример кода или задать новый вопрос.