在pytest中,你可以设置可以有多个不同值的灯具。这些被称为"参数化灯具"。使用这些灯具的测试将使用这些灯具的所有可能值组合运行。
示例
# Fixture `a` can have the values `1` and `2`
@pytest.fixture(params=[1, 2])
def a(request):
yield request.param
# Fixture `b` can have the values `3` and `4`
@pytest.fixture(params=[3, 4])
def b(request):
yield request.param
# The test `test_sum` uses the fixtures `a` and `b`
def test_sum(a, b):
assert sum([a, b]) == a + b
这里,函数test_sum
总共运行四次。每次运行将分别使用不同的参数:a=1, b=3
,a=1, b=4
,a=2, b=3
和a=2, b=4
。
问题
在任何Javascript测试库中是否存在等效的参数化装置? (我们目前使用的是mocha,这对我们来说是最有趣的)
答案 0 :(得分:1)
不幸的是,没有。直到今天,根据我在Internet上找到的内容,Mocha都不支持它。这种语法也有https://github.com/dotnet/coreclr/issues/552,但是目前唯一的解决方案是他们称之为rejected proposal(s)的东西,并且语法看起来像下面的代码(取自文档)。您也可以阅读有关dynamically generating tests的更多信息。
describe('Possible user names behaves correctly ', () => {
const TEST_CASES = [
{args: ['rj'], expected: false},
{args: ['rj12345'], expected: false},
{args: ['rj123'], expected: true},
]
TEST_CASES.forEach((testCase) => {
it(`check user name ${JSON.stringify(testCase.args)}`, () => {
const result = checkUserName.apply(this, testCase.args)
expect(testCase.expected).toEqual(result)
})
})
})
答案 1 :(得分:0)
遇到python和js都需要参数化测试的时候,我觉得一个既好用又好读的就是Jest中包含的.each
语法(抱歉,还没有找到Mocha的选项! ).
一个很好的例子可以在这里找到:https://dev.to/flyingdot/data-driven-unit-tests-with-jest-26bh
答案 2 :(得分:0)
Playwright Test 测试框架借鉴了 PyTest 的这个概念;详情请参阅 https://playwright.dev/docs/test-fixtures。