React native 测试Facebook登录的不同情况
我正在使用React本机应用程序实现Facebook登录 在我的代码中,根据用户授予的权限和是否发生错误,我有不同的结果:React native 测试Facebook登录的不同情况,react-native,jestjs,React Native,Jestjs,我正在使用React本机应用程序实现Facebook登录 在我的代码中,根据用户授予的权限和是否发生错误,我有不同的结果: handleFacebookLogin = async () => { const result = await LoginManager.logInWithPermissions([ "public_profile", "email" ]); if (result.isCancelled) { //do nothing, the
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(“发生错误时显示警报”,()=>{
const errorMock=jest.fn();
const loginMock=jest.fn();
让ageScreen=渲染器
.create()
.getInstance();
康斯特间谍=开玩笑
.spyOn(ageScreen,“showAlert”)
.mock实现(/*TODO:mock fb库错误*/);
ageScreen.handleFacebookLogin();
期望(间谍)。已被调用();
});
我的问题是:
先谢谢你!:) 首先需要模拟
LoginManager
和AccessToken
jest.mock('react-native-fbsdk', () => ({
...jest.requireActual('react-native-fbsdk'),
LoginManager: {
logInWithPermissions: jest.fn(),
},
AccessToken: {
getCurrentAccessToken: jest.fn(),
}
}));
然后在每个测试用例中,模拟将导致您正在验证的场景的结果
it("Shows an alert when an error occurs", () => {
const errorMock = jest.fn();
const loginMock = jest.fn();
// put what result will get
LoginManager.logInWithPermissions.mockReturnValue(...);
// put what data will get
AccessToken.getCurrentAccessToken.mockReturnValue(...);
let ageScreen = renderer
.create(<AgeScreen showAlert={errorMock} handleFacebookLogin={loginMock} />)
.getInstance();
const spy = jest
.spyOn(ageScreen, "showAlert")
ageScreen.handleFacebookLogin();
expect(spy).toHaveBeenCalled();
});
it(“发生错误时显示警报”,()=>{
const errorMock=jest.fn();
const loginMock=jest.fn();
//把结果放在哪里
LoginManager.logInWithPermissions.mockReturnValue(…);
//输入将获得的数据
AccessToken.getCurrentAccessToken.mockReturnValue(…);
让ageScreen=渲染器
.create()
.getInstance();
康斯特间谍=开玩笑
.spyOn(ageScreen,“showAlert”)
ageScreen.handleFacebookLogin();
期望(间谍)。已被调用();
});
关于第二个问题,也是一样的:模拟依赖项并验证是否正在进行相应的调用谢谢您的回答。我尝试了您的解决方案,但收到消息
TypeError:\u reactNativeFbsdk.LoginManager.logInWithPermissions.mockReturnValue不是函数
。关于如何修复此问题,有什么想法吗?稍后编辑:要修复TypeError:
消息,我必须使用LoginManager:{logInWithPermissions:jest.fn().mockReturnValue(false),}
中的jest.requireActual()
。
it("Shows an alert when an error occurs", () => {
const errorMock = jest.fn();
const loginMock = jest.fn();
// put what result will get
LoginManager.logInWithPermissions.mockReturnValue(...);
// put what data will get
AccessToken.getCurrentAccessToken.mockReturnValue(...);
let ageScreen = renderer
.create(<AgeScreen showAlert={errorMock} handleFacebookLogin={loginMock} />)
.getInstance();
const spy = jest
.spyOn(ageScreen, "showAlert")
ageScreen.handleFacebookLogin();
expect(spy).toHaveBeenCalled();
});