2013-07-10 105 views
1

我想写一个自定义的记者,将实习生的测试结果输出到一个文件,但我已经到了路障。是否可以从自定义记者写入文件?

我设法通过Intern的dojo加载程序获取Node文件系统API,但writeFile或writeFileSync都不做任何事情(区别在于writeFileSync锁定进程)。

最低版本的我的记者代码:

define(["node_modules/intern/node_modules/dojo/node!fs"], function (fs) { 
    var buffer = ""; 
    return { 
     "/test/pass": function(test) { 
      buffer += test.id + " passed\n"; 
     }, 
     "/test/fail": function(test) { 
      buffer += test.id + " failed\n"; 
     }, 
     "/runner/end": function() { 
      fs.writeFileSync("result.txt", buffer, function (error) { 
       if (error) { 
        throw error; 
       } 
       console.log("File saved"); 
      }); 
     } 
    }; 
}); 

如果我更换一个控制台日志写电话,我得到预期的数据,让一切似乎是工作的罚款。

编辑:修改后的代码,工程:

define(["node_modules/intern/node_modules/dojo/node!fs"], function (fs) { 
    var buffer = ""; 
    return { 
     "/test/pass": function(test) { 
      buffer += test.id + " passed\n"; 
     }, 
     "/test/fail": function(test) { 
      buffer += test.id + " failed\n"; 
     }, 
     "/runner/end": function() { 
      fs.writeFileSync("result.txt", buffer); 
      console.log("File saved"); 
     } 
    }; 
}); 
+0

你使用节点或浏览器运行测试吗? –

+0

我正在使用节点。这些测试是针对本地Selenium服务器运行的功能测试。 –

回答

1

是的,这可以从文件写入记者,在lcov reporter正是这样做的。但是,在Intern 1.2发布之前,异步I/O操作有可能无法正确完成,因为该过程在测试运行结束时被强制终止。

+0

是的,我理解过程被强行终止的问题 - 但这是否解释了为什么writeFileSync的调用只是挂起?看起来lcov记者本质上是做同样的事情,但通过伊斯坦布尔,所以也许我的问题更多的是我如何导入文件系统。 –

+0

同步功能没有回调。 –

+0

Doh ...看起来像是这个问题,我删除了回调,它现在可以工作。当我从异步版本更改时,我当然没有检查不同的签名:facepalm :. –

相关问题