通过Grunt将qUnit输出写入文件

时间:2014-09-29 17:49:58

标签: node.js junit gruntjs npm qunit

我需要能够将qUnit测试报告给文件,以便我的构建服务器可以解析它们。

我正在通过Grunt使用qUnit(grunt-contrib-qunit)以及找到here的jUnit记者。

我可以将报告写入日志,就像它说明的那样,但我无法将其写入文件。我在我的gruntfile中尝试过qunit回调,但它们似乎都没有得到xml信息。我还尝试简单地重定向stdout,但它(当然)打印了所有非xml命令行的东西以及xml。

简而言之,我在console.log语句中正确地回应了XML。我只需要以某种方式将其转换为文件。通过Grunt,phantomjs或任何其他方式。

1 个答案:

答案 0 :(得分:0)

好吧,如果你从Grunt运行QUnit测试,那么你可以随意使用Node的全部功能。我从来没有使用过那个JUnit插件,但是如果它只是在你的QUnit HTML文件中给你回调,那么你需要一个浏览器解决方案(即使那是phantomjs)。

Phantom uses QtWebKit已经实现了File API,因此您可以使用JUnit的回调实现解决方案,但是,当然,如果您在某些其他地方运行测试,那么这将失败浏览器(即IE9或以下)。以下是这可能的样子(不保证这是确切的,我没有运行它):

QUnit.jUnitReport = function(report) {
  function onInitFs(fs) {
    fs.root.getFile('qunit_report.xml', {create: true}, function(fileEntry) {
      fileEntry.createWriter(function(fileWriter) {

        fileWriter.onwriteend = function(e) { /* if you need it */ };
        fileWriter.onerror = function(e) { /* if you need it */ };

        var blob = new Blob([report.xml], {type: 'application/xml'});
        fileWriter.write(blob);
      }, someErrorHandlerFunction);

    }, someErrorHandlerFunction);
  }
  window.requestFileSystem(window.TEMPORARY, 1024*1024, onInitFs, someErrorHandlerFunction);
}

同样,如果你需要做一些事情来在IE9或(或某些移动浏览器)下编写文件,你将需要另一个解决方案,比如启动ajax请求将数据上传到存储的服务器文件。你甚至可以运行那个"服务器"从Grunt内部并让Node写入文件。