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 中的各种方法中添加了一些日志记录,我似乎大多数都按预期打印,除了 jasmineStarted
、jasmineDone
和 writeFile
。特别是缺少 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 的实例。
我有一些 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 中的各种方法中添加了一些日志记录,我似乎大多数都按预期打印,除了 jasmineStarted
、jasmineDone
和 writeFile
。特别是缺少 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 的实例。