Я создаю поток регистрации пользователей по электронной почте. У меня есть компонент 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()
?