Creez un flux de înregistrare a utilizatorului prin e-mail. Am o componentă TextInputScreen
pe care o afișez de mai multe ori utilizatorului (pentru a-i permite să introducă e-mail, parolă, nume). Controlez afișarea și navigarea acestei componente de ecran dintr-o clasă 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,
});
};
De remarcat că openEmailScreen
primește navigation
ca parametru de intrare și setează this.localNavigation = navigation
. Pe de altă parte, în openPasswordScreen
, folosesc this.localNavigation
pentru navigare.
Vreau să testez că this.localNavigation.push()
este apelat în metoda openPasswordScreen
. Pot face acest test pentru openEmailScreen
, deoarece trimit navigation
ca parametru de intrare când fac apelul EmailConnector.openEmailScreen(mockNavigation)
în test.
Cu toate acestea, în openPasswordScreen
folosesc variabila this.localNavigation
și nu știu cum să o simulez.
Asta am încercat:
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(),
}),
);
});
Testul eșuează cu mesajul de eroare: Number of calls: 0
Cum pot testa în mod fiabil că se apelează this.localNavigation.push()
în funcția openPasswordScreen()
?