Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React/单元测试(Jest)单击方法,默认为_Javascript_Reactjs_Unit Testing_React Test Renderer - Fatal编程技术网

Javascript React/单元测试(Jest)单击方法,默认为

Javascript React/单元测试(Jest)单击方法,默认为,javascript,reactjs,unit-testing,react-test-renderer,Javascript,Reactjs,Unit Testing,React Test Renderer,所以我有一个小问题,我被难住了 我有一个链接组件,如果满足某个条件,该组件将通过至道具转到特定路线。如果不满足该条件,单击该链接将执行其他操作(在我的情况下,启动自定义模式) 我有一个类方法,它绑定到我的链接组件上的onClick处理程序 //Card.jsx 从“组件/链接”导入链接; ... 静态支柱={ 条件:PropTypes.bool }; 建造师(道具){ 此.state={ showModal:错误 }; } ... goToUrlOrLaunchModal(){ 返回( ); }

所以我有一个小问题,我被难住了

我有一个
链接
组件,如果满足某个条件,该组件将通过
道具转到特定路线。如果不满足该条件,单击该链接将执行其他操作(在我的情况下,启动自定义模式)

我有一个类方法,它绑定到我的
链接
组件上的
onClick
处理程序

//Card.jsx
从“组件/链接”导入链接;
...
静态支柱={
条件:PropTypes.bool
};
建造师(道具){
此.state={
showModal:错误
};
}
...
goToUrlOrLaunchModal(){
返回(
);
}
... 
handleClick(e){
const{condition}=this.props;
如果(!条件){
e、 预防默认值();
这是我的国家({
showModal:对
});
}
}
我的问题是单元测试。当
条件

//Card.test.js
...
从“反应测试渲染器”导入渲染器;
...
常量事件={
preventDefault:jest.fn()
};
const component=renderer.create().getInstance();
实例.handleClick(事件);
expect(event.preventDefault).tohaveBeenCall();
expect(instance.state.showModal).toBe(true);
我迷路的地方是测试另一方-当
条件
时,我不需要调用
preventDefault
或执行任何逻辑。我不需要手上的任何东西来开火。
handleClick
中的唯一逻辑用于当
条件
为false时

单击
链接
组件时转到路由的逻辑是正确的,这只是
条件
时的单元测试

我需要测试
preventDefault
是否未被调用,以及
instance.state.showmodel
是否为
true
,但我被难住了。这就是我一直认为它必须是的,但无法超越它

const事件={
preventDefault:jest.fn()
};
expect(instance.handleManageClick).not.tohavebeencall();
expect(event.preventDefault).not.toHaveBeenCalled();
expect(instance.state.showModal).toBe(false);

如果有人能提供一些指导,我们将不胜感激!谢谢大家!

我得到了答案,多亏了在最初的帖子上发表评论的人的帮助

以下是我所做的:

//Card.test.js
常量事件={
preventDefault:jest.fn()
};
const component=renderer.create().getInstance();
constspy=jest.spyOn(实例'handleManageClick');
期望(间谍).not.tohavebeincall();
expect(event.preventDefault).not.toHaveBeenCalled();
expect(instance.state.showModal).toBe(false);

谢谢你的帮助

我不熟悉
react test renderer
,因为我使用
jest
,但观察函数调用的传统方法是使用spies。你试过使用它们了吗?我试过做类似于
constspy=jest.spyOn(例如,'handleManageClick')expect(spy).not.tohavebeencall(),测试通过,但另一位开发人员在查看我的pull请求时表示,这是不必要的,只需要调用
handleClick
方法,这对我来说毫无意义,因为整个要点不是调用
event.preventDefault
,如果调用
handleClick
时未向其传递
event
参数,则只会错误地说
event.preventDefault
不是函数,如果这有意义的话。但是是的,我试过间谍…我完全不同意你的同事。如果不测试实现细节,那么测试单击处理程序的目的是什么?如果我决定删除
HandleManager的所有内部内容,请单击
并将其替换为:`console.log('yes this all should the test'),测试是否仍然通过?同行评议意见不是法律用语。一个健康的工作环境应该允许讨论任何相互尊重的分歧。我也完全不同意他的观点,没有其他正确的方式是有意义的,尤其是你的论点,我知道这是真的。谢谢你的帮助,我很好!