在 Jest 中动态生成测试

Posted

技术标签:

【中文标题】在 Jest 中动态生成测试【英文标题】:Dynamically generate tests in Jest 【发布时间】:2018-06-19 21:11:04 【问题描述】:

我正在寻找一种在 Jest 中生成测试并运行它们的方法。我正在测试一个 API,并且测试用例是从一个 CSV 文件中导入的,并从中生成测试。

目前我得到的是一组参数,我想从中生成测试并运行它们。这就是我认为它的工作方式:

let testFn =  (testName, request, expected) => it(test.testName, (request, expected) => 
    return new Promise((resolve, reject) => 
        http.post(request, (err, res) => 
            if (err) 
                reject(err);
             else 
                resolve(res);
            
        )
    ).then((res) => 
        expect(res.result).toBe(expected['result']);
        return response;
    )
);

上面的代码是我的测试函数。如我所见,应该调用它来执行测试。它根据 3 个参数生成测试:

testName 是他的测试名称,显示在控制台中 request 是发送到 API 的请求 expected 是预期结果。

结构始终相同:res.result 应该是 参数expect

我从 CSV 获得的带有测试的数组元素示例如下:

const oneTest = 
    testName: 'the request should return 10',
    request: 
        input: 10
    ,
    expected: 
        result: 10
    

在这里,我们遍历测试数组并运行所有测试。这是我无法完成的部分。

for (let test in tests) 
    testFn.apply(this, [test.testName, test.request, test.expected])

由此产生的预期结果是,我将从数组中生成所有测试,运行并在控制台中显示结果。

我希望我解释清楚我的问题是什么,但如果不是这样,请不要犹豫(毕竟你是在帮助我!)

PS:这是我第一次使用 Jest,所以我可能会以错误的方式假设很多事情。如果你看到一些完全的愚蠢,请注意它,我很高兴学习! :)

【问题讨论】:

感谢您的编辑,迈克! 【参考方案1】:

我认为这不需要摩卡。也许诀窍是您不必在测试中嵌套测试生成函数,只需在顶层运行它:

这是一个完整的文件,其中包含两个失败的测试和一个通过的测试。

// demo.test.js
const tests = [1, 2, 3];

tests.forEach(value =>
  it(`Expects $value to equal 2`, () => expect(value).toEqual(2))
);

及其输出:

Test Suites: 1 failed, 1 total
Tests:       2 failed, 1 passed, 3 total
Snapshots:   0 total
Time:        0.712s
Ran all test suites related to changed files.

【讨论】:

如果我必须异步加载 [1, 2, 3](例如从 fs),我该怎么做? 不回答你的问题@mspoulsen 但如果你只是从 fs 阅读,也许 readFileSync 是一个很好的回避 是的,我在其他地方也得到了这个提示……它解决了我的问题。谢谢!【参考方案2】:

原来 Jest 中的默认测试运行器是 Jasmine 2,它不支持嵌套的 it() 语句。我的解决方案是改用 Mocha,确实如此。

【讨论】:

以上是关于在 Jest 中动态生成测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 jest-next-dynamic 测试动态导入

如何使用 create-react-app 在 Jest 测试中忽略生成的 Relay 查询文件?

从测试中自动生成文档(javascript、jest)

Python测试框架pytest(28)测试报告Allure - 动态生成标题动态生成功能报告添加用例失败截图

关于动态生成dom绑定事件失效的原因

使用Jest进行单元测试