effector

Discussion on: Инструкция: тестирование в Эффекторе

Collapse
hamper profile image
Samat • Edited on

Всё-таки не всё понятно при работе с React Testing Library (RTL).

  1. В RTL есть инструкция о том, как замокать раз и навсегда провайдеры, создавая customerRender функцию и передавая туда AllTheProviders.
    Сработает ли такой подход здесь?
    Пример кода: stackoverflow.com/a/73150552/8237608
    Дока RTL: testing-library.com/docs/react-tes...

  2. Вы привели пример с fork и handlers, но я так понял, что это только для эффектов. А как мокать events? Или триггеря через allSetlled event мы должны проверять потом не триггернулся ли замоканный эффект?

  3. Ок, я добавил провайдер с актуальным scope, добавил fork c handlers, но когда запускаю, то получаю "Cannot read properties of undefined (reading 'createStore')". Я так понимаю, что это из-за domain? Как и его замокать?

  4. Вот у вас есть пример с loginButtonClicked, можете добавить пример как проверить, что он отработал (expect(...).toHaveBeenCalledTimes(1), к примеру)?

Collapse
alexandrhoroshih profile image
Alexander Khoroshikh
  1. Разным тестам могут быть нужны разные моки, поэтому и Provider из effector-react с форкнутым скоупом у каждого теста скорее всего будет свой.

  2. Ивенты не имеют ни своего состояния, ни сайд-эффектов внутри себя - там нечего мокать.

  3. Не очень понятна проблема без примера кода - похоже на проблемы со сборкой. Начиная с effector@22.0.0 домены не обязательны для тестов или SSR

  4. Достаточно сделать watch на ивенте:

const mockClicked = jest.fn()
loginButtonClicked.watch(mockClicked)

// в конце теста
expect(mockClicked).toHaveBeenCalledTimes(1)
Enter fullscreen mode Exit fullscreen mode