Не удается получить доступ к переменной класса в тесте Jest - React Native - PullRequest
0 голосов
/ 28 марта 2020

Я создаю поток регистрации пользователей по электронной почте. У меня есть компонент TextInputScreen, который я показываю пользователю несколько раз (чтобы он / она мог вводить электронную почту, пароль, имя). Я управляю отображением и навигацией этого компонента экрана из класса EmailConnector:

EmailConnector:

    export default class EmailConnector {
      localNavigation;
    static inputViewModel = {
        //viewModelFields like placeholder, error message etc.
      };

    //called from a different class, takes 'navigation' an input param
    static openEmailScreen = async navigation => {
        this.localNavigation = navigation;
        //set viewModelFields
        this.localNavigation.push('TextInputScreen', {
          viewModel: this.inputViewModel,
          inputValidator: () => this.emailReceived,//callback function
        });
      };

    //called via a callback from the EmailConnector class.
    static openPasswordScreen = () => {
        //set viewModel fields
        this.localNavigation.push('TextInputScreen', {
          viewModel: this.inputViewModel,
          inputValidator: () => this.passwordReceived,
        });
      };

Обратите внимание, что openEmailScreen получает navigation как во входных параметрах и наборах this.localNavigation = navigation. С другой стороны, в openPasswordScreen я использую this.localNavigation для навигации.

Я хочу проверить, что this.localNavigation.push() вызывается в методе openPasswordScreen. Я могу сделать этот тест для openEmailScreen, потому что я передаю navigation в тесте в качестве входного параметра.

Однако в openPasswordScreen я использую переменную this.localNavigation и не знаю, как

Вот что я пробовал:

    it('Navigates to the password screen when the openPasswordScreen method is called', () => {
        const localNavigationMock = {push: jest.fn()};
        EmailConnector.openPasswordScreen(localNavigationMock);
        expect(localNavigationMock.push).toHaveBeenCalledWith(
          'TextInputScreen',
          expect.objectContaining({
            viewModel: expect.any(Object),
            inputValidator: expect.anything(),
            onAccessoryTap: expect.anything(),
          }),
        );
      });

Тест не пройден с сообщением об ошибке: Number of calls: 0

Как я могу надежно проверить, что this.localNavigation.push() вызывается в функции openPasswordScreen()?

...