首页 > 解决方案 > 如何检查 JEST 中的多个值?(或运算符)

问题描述

如何检查函数是否返回多个可能值之一?

我当前的测试功能:

const { randomTense } = require('./src/models/functions');

test('Category exists', () => {
    const data = randomTense()
    console.log(data.category)
    expect(data.category).toMatch('past' || 'present' || 'future' );
});

标签: javascriptunit-testingtestingjestjsautomated-tests

解决方案


您可以使用如下所示的“toContain”方法。

请注意,这不是一个好的测试,因为它不是详尽的或确定性的。如果您data.category有时是其他东西,这可能会随机失败。想象一下,该函数以randomTense随机顺序返回四个字符串:pastpresent和。在这种情况下,该测试将通过四次中的三次,并且由于它是随机的,因此不可能(更难)预测它何时失败。futurethis 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);
});

推荐阅读