我为同一个文件创建了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()
)
测试通过三个问题:
end
上调用_in
时,更改可能无法刷新到文件中。如何在测试中重现竞争条件?_in
和out
的声明会导致程序因Uncaught SyntaxError: Unexpected end of input
而崩溃,尽管该文件存在,为什么会这样?答案 0 :(得分:0)
这是一个评论但是太长了,根据反馈,我会修改。
有没有令人信服的理由不使用JSON.stringify
?或类似的东西:
#assumes custom myObj#toString
fs.writeFile "myObj.js", "module.exports = #{myObj.toString()}", (err) ->
if err then throw err
var importedObj = require 'myObj.js'
assert.equal myObj.toString(), importedObj.toString()
我喜欢溪流和下一个人一样,甚至使用RXJS将它们放到浏览器中,但这似乎是一个奇怪的用例。
因此,根据您的反馈,至少要指出您的反馈意见,简短的答案是,您无法根据定义来可靠地测试竞争条件。如果可以,那就不会成为竞争条件。假设指令的非确定性交织。至于语法错误,每当我看到类似的东西,我检查输出javascript,它几乎总是以我不想要的方式编译cs。