2017-03-07 23 views
1

This gist顯示將對象轉儲爲CSV文件的代碼片段。 使用模塊csv-write-stream完成文件寫入,並返回一個承諾。Node.js - 寫入CSV文件在生產中創建空文件,同時在Mocha測試中確定

此代碼完美地工作在我所做的所有摩卡測試中。

當代碼由主的NodeJS應用程序(包括原料process.stdinconsole.log調用作爲與用戶交互的服務器端REPL應用程序)調用,CSV文件被創建,但它總是空的,沒有錯誤/警告似乎被拋出。我相信,WriteStream的事件處理程序工作正常:沒有'錯誤',所有的'數據'似乎處理,'關閉'運行,承諾按預期解決。

儘管如此,在後一種情況下文件總是0字節。我已經檢查了幾個Q & A,因此無法找到任何具體內容。

我的問題是:

  • 我可以缺少一些錯誤?我如何確保跟蹤關於文件寫入的所有通信?
  • 在哪個方向我可以加強我的調查?其他設置可以幫助我隔離問題?
  • 由於問題可能是由於方程中存在process.stdin,因此無需編寫webapp就可以創建與用戶的簡單輕量級交互方式?

我正在使用Windows 7.節點6.9.4,npm 3.5.3,csv-write-stream 2.0.0。

+1

你如何測試它?測試條件是否與主應用中的使用方式相似?你在主應用程序中使用'process.stdin',這很難在Mocha中測試,所以可能有一個問題呢? FWIW,[這篇博文](https://glebbahmutov.com/blog/unit-testing-cli-programs/)描述瞭如何模擬'process.stdin'。 – robertklep

+0

這很有趣。不,我的測試只是在執行代碼。將嘗試在測試中包含'process.stdin'嘲諷。謝謝! –

回答

0

我設法2點的方式來解決這個問題,可以通過:

  • 解決於FileWriteStream'finish' event的承諾,而不是的CSVWriteStream
  • 去掉了「結束」事件process.exit()我在我的手術結束時使用了process.stdin(這意味着this tutorial page可能需要一些更正)