对于使用TypeScript构建的VSCode扩展,似乎无法使用coveralls
进行覆盖率报告。
当前,我正在将测试用例添加到我们的项目https://github.com/PicGo/vs-picgo/pull/42中,我发现了几种报告覆盖率的方法,但是没有一种对我有用。
The official documentation很少提及自定义测试运行程序,但是我发现了一条帖子here。当我使用F5
启动Extension Test
时,它可以工作,但是当我在控制台中运行npm run test
时,它却不能工作(根本没有覆盖输出)。
我也曾尝试在博客文章中了解自定义运行器(源代码),但是我发现没有事可做,因为我不知道它为什么起作用。
nyc
nyc
的Mocha功能非常强大,但我们无法利用它。运行nyc ./node_modules/vscode/bin/test
时,覆盖率将为0%:
我已经搜索了nyc
的问题页面,关于TS项目存在很多相同的0%覆盖率问题,但是它们与我们的环境都不相同。主要区别在于他们正在使用mocha
进行测试,这与VSCode的./node_modules/vscode/bin/test
脚本不同,它将创建一个新进程来运行测试js文件。我不知道该如何处理。
我搜索了所有问题(mocha,tyc,istanbul,vscode等),并且很少(我没有找到)vscode TypeScript正在使用覆盖率报告供我复制。所以我的问题是:如何获取VSCode TS扩展的覆盖率报告?
答案 0 :(得分:0)
有关更多信息,请参见this post,您可以将test runner code复制到项目的test/index.ts
文件中。
variables:
system.debug: true
jobs:
- job: Windows
pool:
name: Hosted VS2017
demands: npm
steps:
- task: NodeTool@0
displayName: 'Use Node 12.3.1'
inputs:
versionSpec: 12.3.1
- task: Npm@1
displayName: 'Install dependencies'
inputs:
verbose: false
- task: Npm@1
displayName: 'Compile sources and run tests'
inputs:
command: custom
verbose: false
customCommand: 'test'
# https://stackoverflow.com/questions/45602358/lcov-info-has-absolute-path-for-sf
- script: 'sed -i -- 's/..\\..\\//g' coverage/lcov.info && npm run coveralls'
displayName: 'Publish code coverage'
env:
COVERALLS_SERVICE_NAME: $(COVERALLS_SERVICE_NAME)
COVERALLS_REPO_TOKEN: $(COVERALLS_REPO_TOKEN)
- script: 'npm install -g vsce && vsce package'
displayName: 'Build artifact'
- task: CopyFiles@2
inputs:
contents: '*.vsix'
TargetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: vs-picgo-dev-build
trigger:
branches:
include:
- '*' # must quote since "*" is a YAML reserved character; we want a string
pr:
- dev*
请注意,您必须使用sed
删除..\..\
中SF
条路径的lcov.info
前缀:
之前:
SF:..\..\src\vs-picgo\index.ts
之后:
SF:src\vs-picgo\index.ts
答案 1 :(得分:0)
我让Mocha,NYC和VSCode都能正常工作!
您可以在https://github.com/jedwards1211/vscode-extension-skeleton中看到我的解决方案。
基本上,在运行测试之前,我使用Babel将.ts
和@babel/preset-typescript
转换为babel-plugin-istanbul
代码。这使我可以跳过繁琐的测试tsc
输出和使用remap-istanbul
的步骤。
然后在测试运行程序中,我使用(未真正记录的)NYC API在测试完成后将覆盖率写入磁盘。
最后,在测试命令完成后,我在程序包脚本中运行nyc report
。
src/test/index.js
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.`)
}
}
答案 2 :(得分:0)