Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何生成vscode类型脚本扩展覆盖率报告_Node.js_Typescript_Unit Testing_Visual Studio Code_Code Coverage - Fatal编程技术网

Node.js 如何生成vscode类型脚本扩展覆盖率报告

Node.js 如何生成vscode类型脚本扩展覆盖率报告,node.js,typescript,unit-testing,visual-studio-code,code-coverage,Node.js,Typescript,Unit Testing,Visual Studio Code,Code Coverage,对于使用TypeScript构建的VSCode扩展,似乎不可能使用工作服的覆盖率报告 目前,我正在为我们的项目添加测试用例,我找到了几种报告覆盖率的方法,但没有一种适合我 使用自定义TestRunner 很少提到定制测试跑步者,但我发现了一篇帖子。当我使用F5启动扩展测试时,它工作,但当我在控制台中运行npm run Test时,它不工作(完全没有覆盖输出) 我还试图理解博客文章中的定制运行程序(源代码),但我发现我无事可做,因为我不知道它为什么有效 使用nyc 摩卡咖啡非常强大,但我们不能利用

对于使用TypeScript构建的VSCode扩展,似乎不可能使用
工作服
的覆盖率报告

目前,我正在为我们的项目添加测试用例,我找到了几种报告覆盖率的方法,但没有一种适合我

使用自定义TestRunner 很少提到定制测试跑步者,但我发现了一篇帖子。当我使用
F5
启动
扩展测试时,它工作,但当我在控制台中运行
npm run Test
时,它不工作(完全没有覆盖输出)

我还试图理解博客文章中的定制运行程序(源代码),但我发现我无事可做,因为我不知道它为什么有效

使用
nyc
摩卡咖啡非常强大,但我们不能利用它。当我运行
nyc./node\u modules/vscode/bin/test
时,我将获得0%的覆盖率:

我已经搜索了纽约市的问题页面,关于TS项目存在许多相同的0%覆盖率问题,但没有一个与我们的环境相同。主要区别在于,他们使用
mocha
进行测试,与VSCode的
/node\u modules/VSCode/bin/test
脚本不同,它将创建一个新的进程来运行测试js文件。我不知道怎么处理这件事

我搜索了所有的问题(mocha、tyc、istanbul、vscode等),但很少有问题(我没有找到任何添加自定义测试运行程序的问题) 有关更多信息,请参见,您可以将复制到项目的
test/index.ts
文件中

演示azure管道配置 请注意,您必须使用
sed
删除
lcov.info
SF
路径的
.\..\
前缀:

之前:

SF:..\..\src\vs-picgo\index.ts
之后:

SF:src\vs-picgo\index.ts

演示项目:

我用摩卡、纽约和VSCode完成了所有工作

您可以在中看到我的解决方案

基本上,在运行测试之前,我使用Babel将我的
.ts
代码与
@Babel/preset typescript
Babel plugin istanbul
一起传输。这允许我跳过检测
tsc
输出和使用
重新映射istanbul
的复杂额外步骤

然后在测试运行程序中,我使用(没有真正记录的)NYCAPI在测试完成后将覆盖率写入磁盘

最后,在我的包脚本中,我在测试命令完成后运行
nycreport

更新:在每次测试运行之前,您也需要删除
.nyc\u输出
文件夹

src/test/index.js
从“纽约市”导入纽约市
导出异步函数run():Promise{
常数nyc=新的nyc()
等待nyc.createTempDirectory()
//创建摩卡测试
康斯特摩卡=新摩卡({
用户界面:“tdd”,
})
摩卡咖啡色(真)
const testsRoot=path.resolve(_dirname,“…”)
常量文件:数组=等待新承诺((解析、拒绝)=>
地球仪(
“**/**.test.js”,
{
cwd:testsRoot,
},
(错误,文件)=>{
如果(错误)拒绝(错误)
else解析(文件)
}
)
)
//将文件添加到测试套件
files.forEach(f=>mocha.addFile(path.resolve(testsRoot,f)))
const失败:number=等待新承诺(resolve=>mocha.run(resolve))
等待nyc.WriteCoraverageFile()
如果(故障>0){
抛出新错误(`${failures}测试失败。`)
}
}

我自己也为此奋斗了一段时间,直到它正常工作。要让它正常工作,有三个主要挑战:

  • 纽约市
    实例的正确设置
  • 防止启动时的竞争条件
  • 捕获
    nyc
    输出并在调试控制台中显示

  • 你可以找到我的工作测试跑步者。我也在分享我的其他见解。

    请不要多次发布相同的内容!如,和。
    SF:src\vs-picgo\index.ts
    
    import NYC from 'nyc'
    
    export async function run(): Promise<void> {
      const nyc = new NYC()
      await nyc.createTempDirectory()
      // Create the mocha test
      const mocha = new Mocha({
        ui: 'tdd',
      })
      mocha.useColors(true)
    
      const testsRoot = path.resolve(__dirname, '..')
    
      const files: Array<string> = await new Promise((resolve, reject) =>
        glob(
          '**/**.test.js',
          {
            cwd: testsRoot,
          },
          (err, files) => {
            if (err) reject(err)
            else resolve(files)
          }
        )
      )
    
      // Add files to the test suite
      files.forEach(f => mocha.addFile(path.resolve(testsRoot, f)))
    
      const failures: number = await new Promise(resolve => mocha.run(resolve))
      await nyc.writeCoverageFile()
    
      if (failures > 0) {
        throw new Error(`${failures} tests failed.`)
      }
    }