【问题标题】:Jasmine & jasmine-reporters on nodejs missing outputnodejs 上的 Jasmine 和 jasmine-reporters 缺少输出
【发布时间】:2015-03-12 13:44:14
【问题描述】:

我有一些 Jasmine 单元测试,并正在使用 nodejs 对其进行测试。 使用 nodejs 0.10.31、jasmine-npm 2.2.1 和 jasmine-reporters 2.0.5

测试运行,但我没有通过 jasmine-reporters 获得任何输出。 日志显示“16 个规范,0 个失败”行,但没有找到 xml 文件。

经过一天多的测试各种设置和谷歌搜索后,我几乎准备放弃:(

当前设置是使用助手。

var reporters = require('jasmine-reporters');

var junitReporter = new reporters.JUnitXmlReporter({
    savePath: '..',
    consolidateAll: false
});

var jasmineEnv = jasmine.getEnv();

jasmineEnv.beforeAll(function () {
    console.log('Before all...');
    jasmineEnv.addReporter(junitReporter);
});

正在调用此代码,我也尝试添加记者而不是beforeAll,这似乎完全一样。

我在 JUnitXmlReporter 内的各种方法中添加了一些日志记录,我似乎大部分都按预期打印,除了 jasmineStartedjasmineDonewriteFile。尤其是缺少writeFile 似乎是我问题的关键。

我错过了什么,我做错了什么?

【问题讨论】:

    标签: node.js jasmine


    【解决方案1】:

    我能够通过将 Jasmine 特定配置预先放在规范运行器中来解决这个问题。在我的 spec/ 目录中,我使用以下内容定义了一个名为 spec_runner.js 的文件:

    var Jasmine = require('jasmine'),
        reporters = require('jasmine-reporters');
    
    var junitReporter = new reporters.JUnitXmlReporter({
      savePath: __dirname,
      consolidateAll: false
    });
    
    var jasmine = new Jasmine();
    
    jasmine.loadConfigFile("spec/support/jasmine.json");
    jasmine.addReporter(junitReporter);
    jasmine.execute();
    

    此外,在 spec/ 中,我有一个 unit/integration/ 目录,其中分别有我的单元测试和集成测试。拥有一个包含 Jasmine 配置选项的 spec/support/ 目录也很重要。如果您从项目的根目录发出 jasmine init,则应该创建此目录。

    对于此示例,

    spec/support/jasmine.json 应如下所示:

    {
      "spec_dir": "spec",
      "spec_files": [
        "**/*[sS]pec.js"
      ],
      "helpers": [
        "helpers/**/*.js"
      ]
    }
    

    如果您在命令行提示符下从项目的根目录发出:jasmine spec/test_runner.js,您应该会获得 JUnit XML 输出。

    最后,要更改写入 JUnit XML 的路径,您必须更改创建 JUnitXmlReporter 新实例时传递的对象文字中的 savePath 值。

    【讨论】:

      【解决方案2】:

      我没有看到任何从 github 上的 jasmine env 对象或 jasmine 文档调用 beforeAll 的示例。

      尝试将 addReporter 命令拉到 beforeAll 函数之外。

      jasmineEnv.addReporter(junitReporter);
      

      还要确保包含此代码的文件在运行任何规范之前由测试运行程序执行。

      【讨论】:

      【解决方案3】:

      @Jesse:感谢您的回复。在 beforeAll 中添加记者是在其他各种失败位置之后的实验,它们中的大多数都有相同的行为。

      在深入研究涉及的脚本后,我发现了以下问题。

      当在帮助脚本中“简单地”添加报告者时,您会将报告者添加到已经运行的 runnen 中,该 runnen 尚未运行任何规范但已开始执行。因此,是否已经添加了 ConsoleReporter; ConsoleReporter 的 onComplete 调用exit(0)exit(1),这会在将完整状态传递给所有其他报告者的过程中终止/退出进程。 (也描述了https://github.com/jasmine/jasmine-npm/issues/32

      我更改了addReporter-方法,因此它取消了数组中的新报告者而不是推送。这样,新添加的记者在ConsoleReporter 之前被调用,因此也在defaultOnComplete 退出进程之前被调用。

      在我的issue/question 中,他们告诉我 ConsoleReporter 的退出行为已更改,因此所有记者都可以享受完整的事件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-03
        • 2015-11-06
        相关资源
        最近更新 更多