我最近想测试一些自定义方法在componentDidMount
React组件的方法中有条件地调用。
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之前被调用。 这是工作方式吗?还是我做错了什么。 如果这是工作方式,我如何检测从父级加载所有子级组件的时间? 问题答案: 是的,孩子的称为父母之前的。 运行下面的代码