我有一个支持通过Facebook登录的应用程序。我创建了一个FacebookConnector
类,其中有一个login()
方法。在这种方法中,我尝试获取访问令牌。如果获得令牌,则通过调用sendDataToFirebase()
函数将数据发送到Firebase。
这是我的login()
方法:
static login = async () => {
try {
const result = await LoginManager.logInWithPermissions([
'public_profile',
'email',
]);
if (result.isCancelled) {
//do nothing, the user cancelled
} else {
const data = await AccessToken.getCurrentAccessToken();
if (!data) {
//show an alert
} else {
this.sendDataToFirebase(data, result.grantedPermissions.toString());
}
}
} catch (error) {
console.log(error)
}
};
我想测试检索令牌时确实调用了sendDataToFirebase()
。这是我的测试:
it('Calls the function to send data to Firebase when the token IS retrieved', async () => {
jest.mock('./FacebookConnector');
jest.mock('react-native-fbsdk', () => ({
LoginManager: {
logInWithPermissions: jest.fn().mockReturnValue('result'),
},
AccessToken: {
getCurrentAccessToken: jest.fn().mockReturnValue(false),
}
}));
const sendFirebaseMock = jest.spyOn(FacebookConnector, 'sendDataToFirebase');
await FacebookConnector.login();
expect(sendFirebaseMock).toHaveBeenCalledTimes(1);
});
测试失败,并显示消息TypeError: Cannot read property 'logInWithPermissions' of undefined
-这是在catch()
方法的login()
括号中触发的。所以我的问题是:
如何可靠地测试是否调用了sendDataToFirebase()
?
任何帮助将不胜感激!