Javascript 如何在jest中使用回调模拟反应导航函数
我正在尝试使用jest测试我的功能组件:Javascript 如何在jest中使用回调模拟反应导航函数,javascript,react-native,mocking,jestjs,react-navigation,Javascript,React Native,Mocking,Jestjs,React Navigation,我正在尝试使用jest测试我的功能组件: const MyComponent = props => { const myFunction = () => { const { navigation, onIndexChange } = props; navigation.navigate("Modal", { onGoBack: () => { onIndexChange(0);
const MyComponent = props => {
const myFunction = () => {
const { navigation, onIndexChange } = props;
navigation.navigate("Modal", {
onGoBack: () => {
onIndexChange(0);
}
});
};
...
}
现在在我的测试中,如果我运行
expect(navigation.navigate).toHaveBeenCalledTimes(1);
它完全通过了。但是我不知道如何模拟导航
,这样我就可以用来测试它,以便用来调用它,基本上我想要这样的东西:
expect(navigation.navigate).toHaveBeenCalledWith("Modal", {onGoBack: onIndexChange(0)});
这就是我目前嘲笑它的方式:
const navigation = {
navigate: jest.fn()
};
这就是我尝试使用TohavebeenCalled时得到的结果:
你的断言
expect(navigation.navigate).toHaveBeenCalledWith("Modal", {onGoBack: onIndexChange(0)});
表示您希望navigation.navigate
作为第二个对象被调用为onGoBack
,该对象的值为onIndexChange
的值,调用时使用0
但是在您的实现中,onGoBack
的值是一个匿名函数
因此,如果您可以断言已使用具有函数的对象调用函数:
expect(navigation.navigate).toHaveBeenCalledWith("Modal", {
onGoBack: expect.any(Function)
});
无论何时调用该函数,它都将调用给定的onIndexChange
describe('whenever the anonymous function is called', () => {
let onGoBack;
beforeAll(() => {
const [firstCall] = navigation.navigate.mock.calls;
[location, { onGoBack }] = firstCall;
onGoBack()
})
it('should call onIndexChange', () => {
expect(onIndexChange).toHaveBeenCalledWith(0);
});
});
你的断言
expect(navigation.navigate).toHaveBeenCalledWith("Modal", {onGoBack: onIndexChange(0)});
表示您希望navigation.navigate
作为第二个对象被调用为onGoBack
,该对象的值为onIndexChange
的值,调用时使用0
但是在您的实现中,onGoBack
的值是一个匿名函数
因此,如果您可以断言已使用具有函数的对象调用函数:
expect(navigation.navigate).toHaveBeenCalledWith("Modal", {
onGoBack: expect.any(Function)
});
无论何时调用该函数,它都将调用给定的onIndexChange
describe('whenever the anonymous function is called', () => {
let onGoBack;
beforeAll(() => {
const [firstCall] = navigation.navigate.mock.calls;
[location, { onGoBack }] = firstCall;
onGoBack()
})
it('should call onIndexChange', () => {
expect(onIndexChange).toHaveBeenCalledWith(0);
});
});
谢谢您的回复。我试过了,现在它说:-预期为:“onGoBack”:[函数mockConstructor],但收到了:“onGoBack”:[函数onGoBack],谢谢您的回复。我试过了,现在它说:-预期为:“onGoBack”:[函数mockConstructor],但收到了:“onGoBack”:[函数onGoBack],