所以我必须重写一个我用于Protractor / Jasmine E2E测试的HTML报告的报告工具。现在,我能够很好地为一个文件写一个正在运行的测试文件的所有测试结果(例如test1.spec.js)。
我的问题来自于我一次运行多个文件(例如['./test1.spec.js','。/ test2.spec.js'])。理想情况下,我想要做的是将两个测试中的所有信息存储到一个文件数据对象/变量中,然后在完成所有测试文件后将该变量写入文件。
我已尝试在jasmineDone函数中编写,但是在每个测试文件完成后都会发生这种情况,因此它会复制我从报表中获取的信息或覆盖/混淆报表的样式。
this.jasmineDone = function () {
fileData += styles.closeReportTags;
fileData += styles.closeBodyHtmlTag;
fs.appendFileSync("C:/Reports/testing1.html", fileData);
}
我还在我的量角器配置文件中创建了一个afterLaunch方法,并在报告工具文件中使用:
this.afterLaunch = function (callback) {
fs.writeFile("C:/Reports/testing1.html", fileData);
}
在上面我尝试将所有测试结果附加到每次运行的fileData变量中,然后在完成后将其全部写回来,但fileData似乎没有正确传递给afterLaunch方法(它不会写任何文件,只创建一个空白的html文件)。
所以我的问题是,在哪些方面我可以保持运行计数或标记,以便能够确定是否有更多的测试文件排队等待量角器/茉莉花以确定实际测试运行何时完成我可以使用它来编写我的文件。
感谢。
答案 0 :(得分:1)
我遇到了同样的问题。最终,Jasmine / Protractor中提供的所有钩子都不够好(特别是如果您正在进行分片测试)。最终为我工作的是创建我自己的cli,解析/存储我想要的结果,然后然后进行报告。
这是一个例子cli:
#!/usr/bin/env node
var spawn = require('child_process').spawn;
var output = [];
// get protractor args from cli, and skip first two (node and self)
var args = process.argv.slice(2);
// run protractor
protractor = spawn('node_modules/.bin/protractor', args);
/**
* process listeners
*/
protractor.stdout.on('data', function(buffer) {
var text = buffer.toString();
// parse results here...
console.log(text);
});
protractor.stderr.on('data', function(buffer) {
var text = buffer.toString();
console.log(text);
});
protractor.on('exit', function(status) {
// protractor is _done_ done, report your results here...
});
确保将文件chmod为可执行文件(例如chmod 755
)。然后运行它:
./myCI conf.js --baseUrl http://example.com