我有以下测试用例
//to mock props
const createTestProps = (props) => ({
...props,
processDecision: jest.fn(),
navigation: {
getParam: jest.fn(),
navigate: jest.fn(),
},
});
describe('TermsAndConditionsScreen', () => {
let props, wrapper;
beforeEach(() => {
props = createTestProps({});
wrapper = shallow(<TermsAndConditionsScreen {...props} />);
});
it('should invoke the processDecision twice', () => {
wrapper = shallow(<TermsAndConditionsScreen {...props} />);
wrapper.dive().find(Button).first().props().onPress();
wrapper.dive().find(Button).last().props().onPress();
expect(props.processDecision).toHaveBeenCalledTimes(2);
});
});
由于某种原因,它没有检测到props.processDecision。但是如果我这样说的话,它就可以正常工作:
it('should invoke the processDecision twice', () => {
let mockFn = jest.fn();
TermsAndConditionsScreen.prototype.processDecision = mockFn;
wrapper = shallow(<TermsAndConditionsScreen {...props} />);
wrapper.dive().find(Button).first().props().onPress();
wrapper.dive().find(Button).last().props().onPress();
expect(mockFn).toHaveBeenCalledTimes(2);
});
请问有什么区别? 预先谢谢你
答案 0 :(得分:0)
以防万一有人面临同样的困难。在第一个示例中,将processDecision视为一个道具(不正确)。在第二个示例中,它正在考虑processDecision一个原型(的确如此),这就是它起作用的原因。