使用Jest和酶,如何测试this.props.functionToTest是否运行?
class TestComponent extends Component {
static propTypes = {
functionToTest: PropTypes.func
}
componentDidMount() {
this.props.functionToTest()
}
}
在Jest中,我尝试创建过模拟道具并在安装组件时将它们传递给他们。
let props = {
functionToTest = jest.fn(() => {});
}
beforeEach(() => {
const wrapper = mount(<TestComponent {...props} />
}
componentDidMount函数中的console.log显示functionToTest为未定义。显然在挂载过程中传递道具无效。
问题1:如何传递将在componentDidMount函数中显示的模拟道具?
问题2:一旦该功能可用,我如何获得对该功能的访问权限,以便可以使用spyOn或类似工具测试该功能是否已运行?
答案 0 :(得分:1)
我不知道您的确切设置,但这是我要这样做的方式:
jest.fn()
模拟功能expect(...).toBeCalled()
或.toHaveBeenCalled()
一起运行(不同Jest版本之间的差异)。
let props = {
functionToTest: jest.fn() // You don't need to define the implementation if it's empty
};
beforeEach(() => {
const wrapper = mount(<TestComponent {...props} />
}
// In the test code:
it('does something', () => {
expect(props.functionToTest).toBeCalled();
// OR... depending on your version of Jest
expect(props.functionToTest).toHaveBeenCalled();
});
答案 1 :(得分:0)
问题最终导致TestComponent仅在Redux包装器中导出。在类级别添加导出,并在Jest测试导入中对其进行销毁,以及上面发布的解决方案Henrick对其进行了修复。