Jest 或 Mocha:基于异步初始化动态创建测试

2024-03-05

我试图通过循环异步调用返回的数组来动态生成测试。我只是不知道如何做到这一点 - 使用摩卡或使用笑话。为了说明如何使用代码,以下同步示例有效:

describe("Test using various frameworks", () => {
    ["mocha", "jest"].forEach(framework => {
        it(`Should test using ${framework}`, () => {
            expect(true).toBe(true);
        });
    });
});

但是,如果该数组是异步获取的,我无法让测试框架等到获取该数组后再尝试循环它。

async function getFrameworks() {
    //TODO: get it from some async source here
    return ["mocha", "jest"];
}

describe("Test using various frameworks", () => {
    var frameworks;
    //before() instead of beforeAll() if using mocha
    beforeAll(async ()=> {
        frameworks = await getFrameworks();
    });

    frameworks.forEach(framework => {
        it(`Should test using ${framework}`, () => {
            expect(true).toBe(true);
        });
    });
});

这失败了Cannot read property 'forEach' of undefined。我尝试过各种使用组合async/await and Promise并传递一个done回调但无济于事。

我最接近这个的是使用 Mocha 的--delay https://mochajs.org/#delayed-root-suite标志,但这只能解决部分问题。在我的实际用例中我真正想做的是在中运行一些异步初始化before() or beforeAll()然后我用它来动态生成测试。

有关如何使用摩卡或笑话来执行此操作的任何指示吗?


为了回答我自己的问题,我没有找到使用 Jest 或 Mocha 来做到这一点的方法,但我可以使用tap http://www.node-tap.org/- 我通过它使用过babel-tap https://www.npmjs.com/package/babel-tap.

import tap from "babel-tap";

async function getFrameworks() {
    //TODO: get it from some async source here
    return ["mocha", "jest"];
}

getFrameworks().then(frameworks => {
    frameworks.forEach(framework => {
        tap.test(`Should test using ${framework}`, (tester) => {
            tester.ok("It works!");
        });
    }); 
});

不过,您还可以做更多事情。您可以通过进一步调用来创建嵌套范围tester.test()例如。另外,自从tap没有这个概念before, after等等(除非你使用类似摩卡的 DSL http://www.node-tap.org/mochalike/),您可以简单地使用命令式代码来模拟等效的行为。

另外,您还可以自由使用async/await测试内部的样式调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jest 或 Mocha:基于异步初始化动态创建测试 的相关文章

随机推荐

  • 在 PyQt PushButton 单击期间发送附加变量[重复]

    这个问题在这里已经有答案了 我是 Python 和 PyQt 的新手 这是我的第一个应用程序 目前 当单击按钮时 toggleLED checks self LedOn来决定是否打开LED class Screen QWidget def
  • jquery - 获取html表的指定列中的元素

    使用 jquery 我想获取 html 表的指定列中的所有元素 请注意 它可以多于一列 例如 如果我有以下 html 表 table tr td a td td b td td c td tr tr td 1 td td 2 td td 3
  • 使用 rvest 抓取带有 span 的 html 表

    我正在使用 rvest 提取以下页面中的表 https en wikipedia org wiki List of United States presidential elections by popular vote margin ht
  • 动态 Servicefabric 设置和覆盖

    有没有办法完全不告诉服务有关设置 而只在应用程序级别提供它们 我仍然对 servicefabric 配置的工作方式不满意 据我所知 我必须在服务的 settings xml 中指定所有可能的配置值 然后我可以覆盖应用程序的 Applicat
  • elasticsearch:将“应该”变成过滤器

    我想使用过滤器进行搜索 排除与条件或另一个条件不匹配的结果 我尝试在过滤器中执行 应该 操作 但失败了 POST my index search query bool filter should match type1 title sear
  • 为什么抽象方法有时需要重写?

    基于一个上一个问题 https stackoverflow com questions 66182368 stack modification traits in scala not working 下面的代码编译OK trait Logg
  • 打开数据库图表后 SQL Server Management Studio 崩溃

    我在 SQL Server 2018 SSMS 18 1 的本地服务器中有 2 个现有数据库图 打开它时 应用程序变得 无响应 然后崩溃 没有任何错误 过去 7 天运行良好 意思是 18 如果您安装了 SSMS 版本 18 0 则数据库图已
  • Facebook 延迟深度链接在 iOS 上不起作用

    当我使用 Facebook 时一切正常应用广告助手 https developers facebook com tools app ads helper 深度链接测试器 应用程序将从 App Store 下载 URL 将被正确获取和处理 但
  • 如何找到 MySQL root 密码

    我无法弄清楚我的 MySQL root 密码 我怎样才能找到这个 是否有存储此密码的文件 我正在关注这个但我本地没有 directadmin 目录 感谢 thusharaK 我可以在不知道旧密码的情况下重置root密码 在 ubuntu 上
  • 如何在使用 PhoneGap/Cordova 构建的 Android 应用程序中单击按钮时播放音频?

    我正在构建一个类似音板的基本应用程序 其中有一些播放声音的按钮 我正在使用 PhoneGap Cordova 并使用 PhoneGap Build 服务将代码编译为 APK 起初 我使用简单的 HTML5
  • 如何在 %width div 内保持图像长宽比?

    很抱歉再次询问这个问题 但我的搜索没有显示任何我能够实现的内容 我在 div 中有一个具有以下样式的图像 div class thumb grid 6 img src img test2 jpg alt flavin div grid 6
  • 本月第几周

    我正在尝试获取该月的周数 这就是我想要做的 x date V echo x is x y date V d date Y m01 echo y is y week of month x y echo week of month is wee
  • 最有效的不区分大小写的 grep 用法是什么?

    我的目标是匹配属于 Yahoo 的电子邮件地址 域家族 在 nix 系统 我将使用 Ubuntu 中 这些匹配模式的方法中的任何一种都有哪些优点和缺点 如果还有我无法想象的另一种更优雅的解决方案 请分享 他们来了 Use grep有选项 i
  • 异步通知 BlockingQueue 有可用项目

    我需要一个Object当某些情况时得到异步通知BlockingQueue有一件物品要赠送 我在 Javadoc 和网络上搜索了一个预制的解决方案 然后我最终得到了我的一个 也许是幼稚的 解决方案 如下 interface QueueWait
  • 将 Dropwizard JDBI 升级到 JDBI 3

    如何将 dropwizard jdbi 2 78 升级到 jdbi 版本 3 因为我想利用其中包含的联接功能 项目成员在此 我们将在 v3 最终版本之前发布更完整的迁移指南 与此同时 我们的一位用户刚刚提交了一份不错的更改列表作为起点 Se
  • CreateRef方法迁移到.Net Core导致404,如何使用.Net Core在OData中实现创建关系

    我有 2 个 POCO 教训和具有 int PK 的特征 我设置了导航属性 以便我可以成功 expand像这样 http localhost 54321 odata Lessons expand Traits http localhost
  • 在 ICollection> 上实现 .Contains() 的最简单方法

    假设我有一个Dictionary
  • 有没有API可以判断Android设备是否是双核?

    我正在通过多线程进行双核优化 它的工作原理如下 如果设备具有双核处理器 则创建两个线程进行计算 如果设备只有一核处理器 则仅创建一个线程进行计算 我的问题是 我的程序如何知道设备是否是双核 我只想有一个程序可以在双核和单核设备上运行 所以它
  • Laravel:在 if-else 条件内扩展不同的布局

    我试图在 if else 语句中扩展不同的布局 这是我的代码 if Auth check extends layouts adminPanel else extends layouts home endif 但视图文件扩展了两种布局 无论用
  • Jest 或 Mocha:基于异步初始化动态创建测试

    我试图通过循环异步调用返回的数组来动态生成测试 我只是不知道如何做到这一点 使用摩卡或使用笑话 为了说明如何使用代码 以下同步示例有效 describe Test using various frameworks gt mocha jest