React native 测试失败,我可以';我不明白为什么🤔;

React native 测试失败,我可以';我不明白为什么🤔;,react-native,jestjs,React Native,Jestjs,我有一个LandingScreen组件,其中包含一个onPositivePermission函数。在这个函数中,我从我的FacebookConnector调用一个静态登录方法。我想测试登录方法是否确实在onPositivePermission中被调用。我尝试过不同的测试,但都不管用。我的组成部分如下: jest.mock('../../connectors/Facebook/FacebookConnector', () => ({ login: mock.loginMock,

我有一个
LandingScreen
组件,其中包含一个
onPositivePermission
函数。在这个函数中,我从我的
FacebookConnector
调用一个静态登录方法。我想测试登录方法是否确实在
onPositivePermission
中被调用。我尝试过不同的测试,但都不管用。我的组成部分如下:

jest.mock('../../connectors/Facebook/FacebookConnector', () => ({
      login: mock.loginMock,
    }));
着陆屏幕

class LandingScreen extends Component {
    constructor(props) { 
        super(props); 
        this.loginMethods = { 
             fbLogin: 0, 
             emailLogin: 1, 
         } 
    }

onPositivePermission = loginMethod => {
    if (loginMethod === this.loginMethods.fbLogin) 
        { FacebookConnector.login(); 
    } 
};
facebook连接器

export default class FacebookConnector {
    static login = async() => { 
        try { const result = await LoginManager.logInWithPermissions([                                    'public_profile', 'email', ]); 
        if (result.isCancelled) { 
            //do nothing, the user cancelled 
        } else { 
            //handle Facebook login } 
    } catch (error) { 
        //handle error  
        } 
    };
这是我的测试:

  it('Calls the Facebook login method', () => {
    const fbLogin = 0;
    const landingScreen = renderer.create(<LandingScreen />).getInstance();
    let loginMock = jest.fn();
    jest.mock('../../connectors/Facebook/FacebookConnector', () => ({
      default: class {
        static login() {
          mock.loginMock;
        }
      },
    }));

    landingScreen.onPositivePermission(fbLogin);
    expect(loginMock).toHaveBeenCalled();
  });
然而,在这两种情况下,我得到:

 expect(jest.fn()).toHaveBeenCalled()
 Expected number of calls: >= 1
 Received number of calls:    0
我已经在我的
onPositivePermission()
函数中添加了日志,并看到测试确实调用了它,但是expect语句失败了

我还尝试删除
onPositivePermission()中的if语句预期仍然失败

请注意,我手动测试了该功能,并调用了
FacebookConnector.login()
,但我还想对其进行单元测试


有人知道单元测试为什么不工作吗?

login
FacebookConnector
类中的一个静态方法,因此可以用以下方式模拟它

it('Calls the Facebook login method', () => {
  const fbLogin = 0;
  const landingScreen = renderer.create(<LandingScreen />).getInstance();

  const loginMock = jest.fn();
  loginMock.mockReturnValue('some value');
  FacebookConnector.login = loginMock;

  landingScreen.onPositivePermission(fbLogin); 
  expect(loginMock).toHaveBeenCalled();
});
它将毫无问题地工作

非常感谢,这很有效!:)但是有一个问题:
loginMock.mockReturnValue('some value')的意义是什么;FacebookConnector.login=loginMock?来自
FacebookConnector
login()
方法在生产代码中没有返回任何值,因此我有点不明白为什么需要上面的两行代码。
const someFunction = jest.fn(); //creating a jest.fn instance
someFunction(); //we are calling the function here.
expect(someFunction).toHaveBeenCalled() // it will pass