Javascript 为测试目的生成无效的文件名
我有一段代码需要测试。其中一个测试要求添加覆盖范围,其中创建了一个Javascript 为测试目的生成无效的文件名,javascript,node.js,file,unit-testing,Javascript,Node.js,File,Unit Testing,我有一段代码需要测试。其中一个测试要求添加覆盖范围,其中创建了一个流.Writable,提供了指定的输出文件名 我需要测试可写应该失败的情况,它应该发出错误事件,并且应该执行正确的错误处理函数,等等 现在,我想我应该只创建一些无效的文件,使用一些奇怪的名称。但这项任务似乎比预期的要难一些 我怎样才能自动将此代码段放入catch块 outputFile = String(outputFile); // not exactly how this is really done,
流.Writable
,提供了指定的输出
文件名
我需要测试可写
应该失败的情况,它应该发出错误
事件,并且应该执行正确的错误处理函数,等等
现在,我想我应该只创建一些无效的文件,使用一些奇怪的名称。但这项任务似乎比预期的要难一些
我怎样才能自动将此代码段放入catch
块
outputFile = String(outputFile); // not exactly how this is really done,
// but the end result is the same
try {
writer = fs.createWriteStream(outputFile, { flags: 'w' })
.on('error', errorHandler) // basically throws the error
.on('close', closeHandler); // function 100% tested
} catch (e) {
// irrelevant code regarding this question, untested so far
}
基本上,outputFile
的值是多少
**编辑**
临时测试目录的一个屏幕封顶,在该目录中,从该违规代码创建奇怪的名称
编辑:
尝试使用很长的文件名。(fs似乎只支持255-260个字符长)
忽略下面的部分
我的解决方案是使用一个通用的errorHandler,也就是说,代码类似于
try{
writer = fs.createWriteStream(outputFile, { flags: 'w' })
.on('error',errorHandler)
.on('close', closeHandler);
}catch(e){
errorHandler(e);
}
在不太了解节点的情况下,我会模拟
fs.createWriteStream
。如果fs是一个全局变量,那么在您的测试中,就在执行该代码段所在的函数之前,执行以下操作:do\u oldWritestream=fs.createWriteStream;fs.createWriteStream=函数(){throw'mock error'}代码>这将确保无论您向catch块抛出什么outputFile,您都将进入catch块。测试运行后,恢复fs.createWriteStream,您应该很好地了解文件名不能包含/?*:;{}\@laggingreflection,这很有趣,因为我确实尝试创建了像“invalid*file?name”
这样的文件,但没有抛出任何错误。甚至“无效\\file”
。您是否尝试实际写入流?因为那可能就是它抛出错误的时候。@laggingreflection:事实上,是的。因此,我说:“但任务似乎比预期的要难一些。”。它确实会创建像invalid*file
之类的文件。“测试”代码的概念不是“更改代码以适应测试”,而是“找到测试现有代码的解决方案”。这不好。您不需要修改catch块中的代码,只需将其取出,放入var errorHandler=function(e){…}
阅读我的最后一条注释。我不会重复我自己的话。没办法,如果我是正确的,createWriteStream是异步的,另一个选择是用同步的东西替换它……我的错,没有正确理解这个问题,你试过一个长得离谱的名字(1000-2000个字符),