2013-07-10 32 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 :. –

相關問題