javascript - 如何检查 JEST 中的多个值?(或运算符)
问题描述
如何检查函数是否返回多个可能值之一?
我当前的测试功能:
const { randomTense } = require('./src/models/functions');
test('Category exists', () => {
const data = randomTense()
console.log(data.category)
expect(data.category).toMatch('past' || 'present' || 'future' );
});
解决方案
您可以使用如下所示的“toContain”方法。
请注意,这不是一个好的测试,因为它不是详尽的或确定性的。如果您data.category
有时是其他东西,这可能会随机失败。想象一下,该函数以randomTense
随机顺序返回四个字符串:past
、present
和。在这种情况下,该测试将通过四次中的三次,并且由于它是随机的,因此不可能(更难)预测它何时失败。future
this is a bug
测试随机函数并不是真正的事情。在这些情况下,您通常所做的是将函数分成更小的部分并模拟随机部分。
因此,与其拥有一个可以完成所有事情的函数加上随机选择,不如将所有逻辑从其中取出,只留下通常只有一行的随机选择。然后,您为您的测试模拟该功能并测试返回选项/枚举的另一个函数。
const { randomTense } = require('./src/models/functions');
const POSSIBLE_VALUES = ['past', 'present', 'future'];
test('Category exists', () => {
const data = randomTense();
expect(POSSIBLE_VALUES).toContain(data.category);
});
推荐阅读
- c# - LINQ - 如果表不包含任何数据,左外连接查询返回异常
- php - 带有 SQL 查询的可选搜索输入
- java - Axis2 1.6.4 到 1.7.9 - AxisFault:找不到端点引用 (EPR) 的服务
- python - 在 concurrent.futures 中共享变量
- javascript - 如何切换单个图像?
- r - R中两个相同变量的交叉表 - 反映在对角线上
- java - Mapbox 服务拒绝导入
- python - 如何从 FASTA 中提取序列的一部分
- tomcat - HttpsURLConnectionImpl.getInputStream:SSL 错误连接重置
- r - 如何在 R 中使用特定的行名和列名初始化 m*n 矩阵