【问题标题】:How can I get jasmine-ts to execute my specs with a specific seed?如何让 jasmine-ts 使用特定种子执行我的规范?
【发布时间】:2019-06-13 05:27:12
【问题描述】:

我正在使用jasmine-ts 0.3.0 版运行单元测试。

以前的版本运行良好,但我升级的那一刻,我会得到输出:

未找到规格

我找到了一个github issue(和this one),其中有人评论:

传递给jasmine-ts 的所有参数都需要在该参数argv.config || process.env.JASMINE_CONFIG_PATH || "spec/support/jasmine.json"; 中包含其中一个

确实,创建jasmine.json 文件解决了“无规格问题”:

{
    "spec_dir": "../src/**/specs",
    "spec_files": [
        "**/*[sS]pec.ts"
    ],
    "stopSpecOnExecutionFailure": false,
    "random": true
}

随机运行我的测试,我发现我有一些失败,所以我想用一个特定的种子来播种 jasmine 执行以重现问题。

我尝试将"seed": 123 配置添加到我的jasmine.json,但这不起作用。我发现一些 docs 描述了 jasmine.json 应该是什么样子,并且没有提到任何 seed 配置。

提到seed 的是关于命令行选项的部分here

所以我尝试了:

jasmine-ts --seed=123 --config="./jasmine.json"

(请记住,配置文件显然是必需的 - 或者至少我没有看到任何选项来指定我的规格在哪里而不使用它)

然而,这在茉莉花日志中不起作用:

用种子 94263 随机化

我提供的配置文件显然覆盖了命令行选项。我可以通过指定选项--random=false 看到这一点,但输出仍然显示Randomized with seed ...,因为我的jasmine.json 包含"random": true

所以...我不能在 jasmine.json 中指定seed,指定--seed=... 没有任何效果。

在这种情况下如何使用 jasmine-ts 0.3.0 设置种子?

【问题讨论】:

    标签: node.js unit-testing jasmine jasmine-node jasmine-ts


    【解决方案1】:

    在升级到 Angular 12 时遇到了这个问题。由于某些异步测试的顺序在执行之间没有正确解决,我有一个特定的种子失败了。

    我能够通过更新 karma.conf.js 文件来运行特定的种子:

    client:{
      captureConsole: true,
      clearContext: false, // leave Jasmine Spec Runner output visible in browser
      jasmine: {
        seed: 19224, // set value to here and comment out when done 
        random: false // set this to false while running the seed and switch back to true for normal builds.
      }
    

    这样做对我来说是一种运行特定茉莉花种子的简单方法。

    【讨论】:

      【解决方案2】:

      从 jasmine-ts 版本 0.3.2 开始(here's 已关闭问题),命令行参数现在被转发给 jasmine,所以给定一个 package.json 如下:

      {
         ...
         "scripts": {
            "test": "jasmine-ts.cmd --config=jasmine.json"
         }
      }
      

      您可以从命令行运行npm run test -- --seed=1234

      【讨论】:

        【解决方案3】:

        使用常规 Jasmine 遇到了同样的问题,发现由于某种原因它不会在 loadConfig 中复制它,但是如果从您自己的脚本运行它,您创建的 jasmine 对象上有一个方法:

        const jasmine = new Jasmine();
        jasmine.seed(1234);
        

        【讨论】:

        • 这与使用jasmine.json 运行测试有什么关系。我是否必须使用相同的 jasmine 对象来运行测试,或者它是如何工作的?
        • 澄清一下,我是否必须在每个规范文件(或一个规范文件)的 beforeAll 中运行它,还是什么?
        • 不确定 'jasmine-ts' 与 js 版本有何不同。我有节点脚本来运行测试。它从节点包中导入 Jasmine,然后在调用“loadConfig(json)”之前在创建的 jasmine 对象上调用“seed()”
        • @JasonGoemaat 谢谢!我永远不会在文档中找到这个。
        猜你喜欢
        • 1970-01-01
        • 2017-09-22
        • 2013-06-25
        • 1970-01-01
        • 2012-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-14
        相关资源
        最近更新 更多