当前位置: 首页 > 面试题库 >

使用Jest监视componentDidMount中的方法调用

商棋
2023-03-14
问题内容

我最近想测试一些自定义方法在componentDidMountReact组件的方法中有条件地调用。

componentDidMount() {
  if (this.props.initOpen) {
    this.methodName();
  }
}

我使用Jest作为测试框架,其中包括jest.fn()用于模拟/间谍的工具。我已经读过,通过执行以下操作,与Sinon一起测试将是微不足道的:

sinon.spy(Component.prototype, "methodName");
const wrapper = mount(<Component {...props} />);
expect(wrapper.instance().methodName).toHaveBeenCalled();

我试图像这样用Jest重新创建它:

Component.prototype.methodName = jest.fn();
const wrapper = mount(<Component {...props} />);
expect(wrapper.instance().methodName).toHaveBeenCalled();

此代码失败,并引发以下错误:

jest.fn() value must be a mock function or spy.
Received:
  function: [Function bound mockConstructor]

是否可以用Jest测试此功能?如果是这样,怎么办?


问题答案:

关键是使用笑话spyOn方法。应该是这样的:

const spy = jest.spyOn(Component.prototype, 'methodName');
const wrapper = mount(<Component {...props} />);
wrapper.instance().methodName();
expect(spy).toHaveBeenCalled();

如此处所示:测试功能是否被称为反应和酶

请注意 ,最好的做法是在每次测试运行后清除监视功能

let spy

afterEach(() => {
  spy.mockClear()
})

https://facebook.github.io/jest/docs/en/jest-
object.html#jestclearallmocks



 类似资料:
  • 问题内容: 假设我有一个导出默认功能的简单文件: 我会这样使用: 我想在测试中断言在保持原始功能的同时调用了此方法。但是,我需要一个对象以及一个函数名称作为参数。您如何以一种干净的方式做到这一点?还有一个类似的GitHub的问题为兴趣的人。 问题答案: 我最终抛弃默认的导出(为什么你应该:1,2): 然后我可以像这样使用和监视它: 一些建议将它们包装在const对象中,然后导出。我想您也可以使用包

  • 我一直认为Mockito工作某种代理之类的东西。但现在我发现,Mockito允许我做一些像 这不适用于代理。它是如何做到这一点的?这种技术可以用来调用内部AOP方法吗?(请参见Spring AOP不适用于另一个方法中的方法调用)

  • 我有一个服务类叫“主机服务” 现在我想使用Mockito编写一个单元测试用例'HostServiceTest'。我将创建一个主机服务和模拟平台服务的实例,并监视这个主机服务实例来模拟isReachable方法。 在测试用例中,它不是调用isReachable的模拟方法,而是进入实际的方法。 我看到了这个问题:试图窥探方法是调用原始方法,我确实遵循了他们建议的方法,但它调用的是实际的方法。o 这可能

  • 问题内容: 我需要有关该组件的一些帮助。我的程序使用将文件从一个位置复制到另一个位置。实际的复制方法是。 我现在有两个问题。 如何监视FileChannel的传输进度?我发现的所有教程都使用常规的java.io InputStreams并在循环遍历inputstream时提高了int的进度。 我的复制方法(FileChannel方法)封装在一个单独的方法中,该方法由其他方法反复访问源文件夹和目标文

  • 我正在尝试在像这样: 然后在我的它呈现: 我正在将我的fetch记录到控制台中,它被调用了三次。流程是我在登录页面上(加载时挂载一次),我登录,它将我重定向到自己呈现的主页。此时,我在控制台中看到:

  • 问题内容: 我父母的渲染中有以下代码 以及下面我孩子图表中的代码 我以为仅在所有子项都加载后才调用父级的componentDidMount。但是在这里,父级的componentDidMount在子级的componentDidMount之前被调用。 这是工作方式吗?还是我做错了什么。 如果这是工作方式,我如何检测从父级加载所有子级组件的时间? 问题答案: 是的,孩子的称为父母之前的。 运行下面的代码