【发布时间】:2016-06-04 16:40:33
【问题描述】:
我为同一个文件创建了一个WriteStream 和一个ReadStream。
我正在测试将对象持久保存在磁盘上的代码。
# Code
g:(stream, cb)->
stream.on("data", (chunk) -> chunks.push(chunk))
stream.on("end", () -> cb(MyComplexObjectClass.decode(Buffer.concat(chunks)))
# Test
it "allows to persist MyComplexObject to disk", (done) ->
MyComplexObject = ... # Initialization code
_in = fs.createWriteStream("XXX")
out = fs.createReadStream("XXX")
_in.write(MyComplexObject.encode())
_in.end()
g(out, (x) ->
# Validation of x here, should be MyComplexObject
done()
)
测试通过,三个问题:
- 我相信存在竞争条件:当在
_in上调用end时,更改可能不会刷新到文件中。如何在测试中重现竞态条件? - 交换
_in和out的声明会使程序与Uncaught SyntaxError: Unexpected end of input一起崩溃,尽管该文件存在,这是为什么呢? - 有没有更好的方法来实现(仍然使用流)?
【问题讨论】:
标签: javascript node.js coffeescript race-condition