【问题标题】:Test that React prop method has not been called with Jest测试没有用 Jest 调用 React prop 方法
【发布时间】:2019-12-12 21:14:57
【问题描述】:

如何测试有条件调用的 prop(callback) 函数 我有一个组件,它在以下条件下将 prop 函数传递给它的子组件:

if(this.props.myFun) {
  this.props.myFun();
}

为了测试这一点,我在这里有两种情况: 1.prop传递给组件的地方

 <ChildComp myFun={value => value } /> and I can test it from the child-
const comp = mountWithIntl(<ChildComp myFun={value => value } />);
expect(comp.instance().props.myFun).toHaveBeenCalled();
  1. prop 没有通过的地方:我尝试喜欢
const comp = mountWithIntl(<MyComp />);
expect(comp.instance().props.myFun).not.toHaveBeenCalled();

但是,如果我在安装组件时模拟道具,那么 方法将被调用。但是我如何测试未定义或未模拟的 支柱? 如果我不通过道具并做:

expect(comp.instance().props.myFun).not.toHaveBeenCalled();

我会得到:

jest.fn() 值必须是模拟函数或间谍

我不能按照我的代码做 请帮忙

【问题讨论】:

  • myFun 将是未定义的,那么它怎么可能被调用呢?如果您在 MyComp 中有一些调用 myFun 的方法,那么您应该测试该方法。
  • 正如里卡多提到的 myFun 将是未定义的,因此您可以随时检查:```expect(comp.instance().props.myFun).toBeUndefined(); ```
  • 啊!谢谢你。我必须测试 expect(comp.instance().props.myFun).not.toHaveBeenCalled();只是它没有包含在测试覆盖范围内 toBeUndefined() 为我工作。谢谢

标签: reactjs jestjs enzyme


【解决方案1】:

我不认为你可以测试一个未通过的函数不会被调用。您可以做些什么来测试它是否在没有该功能的情况下被渲染。应该够了

【讨论】:

    猜你喜欢
    • 2019-07-24
    • 2021-09-15
    • 1970-01-01
    • 2021-11-27
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2021-10-16
    相关资源
    最近更新 更多