我正在尝试使用玩笑来测试我的功能组件:
const MyComponent = props => {
const myFunction = () => {
const { navigation, onIndexChange } = props;
navigation.navigate("Modal", {
onGoBack: () => {
onIndexChange(0);
}
});
};
...
}
现在我可以跑步了吗
expect(navigation.navigate).toHaveBeenCalledTimes(1);
它完美地过去了。但是我不知道如何模拟navigate
以便可以用toHaveBeenCalledWith
对其进行测试,基本上我想要这样的东西:
expect(navigation.navigate).toHaveBeenCalledWith("Modal", {onGoBack: onIndexChange(0)});
这是我目前嘲笑的方式:
const navigation = {
navigate: jest.fn()
};
答案 0 :(得分: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);
});
});