使用Jest测试Facebook登录

时间:2020-03-16 16:32:01

标签: javascript react-native jestjs

我有一个支持通过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()

任何帮助将不胜感激!

0 个答案:

没有答案