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'),测试是否仍然通过?同行评议意见不是法律用语。一个健康的工作环境应该允许讨论任何相互尊重的分歧。我也完全不同意他的观点,没有其他正确的方式是有意义的,尤其是你的论点,我知道这是真的。谢谢你的帮助,我很好!