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