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个字符),