【问题标题】:Write qUnit output to file via Grunt通过 Grunt 将 qUnit 输出写入文件
【发布时间】:2014-09-30 22:39:11
【问题描述】:

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

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

我可以按照它的说明将报告写入日志,但我无法将其写入文件。我已经在我的 gruntfile 中尝试了 qunit 回调,但它们似乎都没有获得 xml 信息。我还尝试简单地重定向标准输出,但它(当然)打印了所有非 xml 命令行内容以及 xml。

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

【问题讨论】:

    标签: node.js junit gruntjs npm qunit


    【解决方案1】:

    好吧,如果您从 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 写入文件。

    【讨论】:

    • 我认为文件系统 API 的逻辑是合理的,但我无法让幻像识别该方法。
    • 抱歉 - 评论窗口超时。 编辑: 我认为文件系统 API 的逻辑是合理的,但我无法成功完成 qunit 任务。但是,在阅读了您关于从 Grunt 启动的“服务器”的最后一句话后,我确实有一个“啊哈”的时刻。我今天早些时候刚刚读到这件事,完全忘记了它。谢谢!
    • 好吧,很抱歉这个解决方案对你不起作用,但希望你能有所进展!对于其他阅读者,我所说的“服务器”是一个简单的 Node grunt-contrib-connect 服务器,带有一个基本的回调来处理数据上传并将其保存到文件中。
    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多