nodejs 上的 Jasmine 和 jasmine-reporters 缺少输出

Jasmine & jasmine-reporters on nodejs missing output

我有一些 Jasmine 单元测试,正在用 nodejs 测试它们。 使用 nodejs 0.10.31、jasmine-npm 2.2.1 和 jasmine-reporters 2.0.5

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

经过一天多的测试各种设置和 google-ing 我几乎准备放弃了:(

当前设置是使用助手。

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 似乎是我问题的关键。

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

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

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

jasmineEnv.addReporter(junitReporter);

还要确保包含此代码的文件在您的任何规范 运行.

之前由您的测试 运行ner 执行

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

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

当 'simply' 在 helper-script 中添加报告器时,您将报告器添加到已经 运行 runnen,没有 运行 任何规格但执行已启动。因此已经添加了一个 ConsoleReporter; ConsoleReporter 的 onComplete 调用 exit(0)exit(1) 并且此 kills/exits 过程正在将完整状态传递给所有其他记者。 (也描述了https://github.com/jasmine/jasmine-npm/issues/32

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

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

我能够通过将 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 的路径,您必须更改创建新对象时传递的对象文字中的 savePath 值JUnitXmlReporter 的实例。