2017-03-07 20 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可能需要一些更正)