Я реализую вход в Facebook в приложении React Native, используя https://github.com/facebook/react-native-fbsdk.
В моем коде у меня разные результаты в зависимости от того, какие разрешения пользователь предоставляет и в зависимости от того, или нет. ошибка не возникает:
handleFacebookLogin = async () => {
const result = await LoginManager.logInWithPermissions([
"public_profile",
"email"
]);
if (result.isCancelled) {
//do nothing, the user cancelled
} else {
const data = await AccessToken.getCurrentAccessToken();
if (!data) {
this.showAlert(
strings.onboarding.fb_login.error_title,
strings.onboarding.fb_login.error_body,
strings.onboarding.fb_login.ok_button
);
} else {
if (result.grantedPermissions.toString().contains("user_email")) {
//navigate to screen A
} else {
//navigate to screen B
}
}
}
};
showAlert = (title, body, button) => {
//show alert
};
Я хочу написать тест для каждого случая (например, возникает ошибка, пользователь дает разрешение на электронную почту, пользователь НЕ дает разрешение на электронную почту).
Я начал писать тест для показа предупреждения при возникновении ошибки, но я застрял в том, чтобы высмеивать фактическую ошибку (сценарий if (! Data) из приведенного выше кода).
it("Shows an alert when an error occurs", () => {
const errorMock = jest.fn();
const loginMock = jest.fn();
let ageScreen = renderer
.create(<AgeScreen showAlert={errorMock} handleFacebookLogin={loginMock} />)
.getInstance();
const spy = jest
.spyOn(ageScreen, "showAlert")
.mockImplementation(/*TODO: mock fb library error */);
ageScreen.handleFacebookLogin();
expect(spy).toHaveBeenCalled();
});
Мои вопросы:
Как мне завершить sh этот контрольный пример, чтобы я мог надежно проверить, будет ли отображаться предупреждение в случае ошибки?
Как мне протестировать другой сценарий ios (например, перейти к экрану А, если пользователь предоставляет разрешение по электронной почте)?
Заранее спасибо! :)