【发布时间】:2021-10-12 21:43:19
【问题描述】:
我了解单元测试独立函数(如帮助程序类)的知识,但我如何处理非独立函数(通常在具有多个验证和结果的类文件中)?
下面的示例显示了多个条件检查和不同结果的响应。
- 我是否在我的测试用例中调用
valueCheck和proceedApiCheck函数?但是在测试中我不需要不同的场景或操作。 (例如,setState / navigating) - 我是否在我的测试用例中编写了
valueCheck和proceedApiCheck的新函数?但这意味着我的代码中有两种不同的逻辑。有一天,如果我在应用程序中更改逻辑,我的测试用例不会失败,因为它引用的是旧逻辑。
你们中的任何人都可以对此有所了解吗?
示例
export class Screen1 extends React.Component {
valueCheck = (value) => {
if(value === 'abc'){
this.setState({ isNavigating:true, transfer: true })
this.proceedApiCheck(value)
}
if(value === '123'){
this.setState({ isNavigating:true, transfer: false })
this.proceedApiCheck(value)
}
}
proceedApiCheck = async(value) =>{
let data
try{
data = await FirstApi(value);
this.setState(data)
}catch(){
this.navigateToScreen('Failure')
return;
}
switch(data.name){
case 'fake adidas':
this.navigateToScreen('Failure')
return;
case 'fake nike':
this.navigateToScreen('Failure')
return;
}
try{
const result = await secondApi(data.price);
switch(result.currency){
case 'EURO':
this.navigateToScreen('Euro')
case 'Pound':
this.navigateToScreen('Pound')
default:
this.navigateToScreen('Dollar')
}
}catch(){
this.navigateToScreen('Failure')
return;
}
}
}
【问题讨论】:
-
您的问题似乎很主观而且过于开放,不清楚您真正想要回答什么。尝试提供一个示例单元测试用例并缩小查询的重点。我还建议您查看React-Testing-Library 进行 UI 单元测试。
-
嗨@DrewReese,感谢您的cmets。我已经更新了我的问题,使其在测试非独立功能时非常具体。谢谢你指出。我的查询实际上是 UnitTest 如何始终引用 1 条逻辑,因此在更新应用程序逻辑时,不需要我们更新 UnitTest 逻辑。这就是我的困惑。
-
我不确定我是否理解您的困惑。您导出/导入要进行单元测试的功能/组件。
-
啊,我想我理解这种困惑......这也是我向你指出 RTL 的原因......要点很简单,你不要“接触”到 React 组件并触摸单元测试时的内部实现,而是通过它的 API 与组件交互,即
props和 UI,与其他组件和用户一样。如果您需要或可以,您可以将特定代码块提取到实用程序函数中并单独测试,但如果它们与组件状态更新耦合,则这是不可能的。 -
@TommyLeong 要进行单元测试,请为您需要涵盖的任何单元编写可测试的代码。在您的情况下,两个函数不是好的单位,而是
Screen1。尝试使用将调用 valueCheck 的模拟数据为 Screen1 编写单元案例
标签: javascript reactjs react-native jestjs