我正在使用"Istanbul cover test.js"运行一些节点js单元测试,其中test.js是主测试文件,它将调用我们的代码库中的实际脚本.问题是它生成的覆盖率报告只在test.js文件上,而不在代码库中的实际代码行上.请原谅我这是一个愚蠢的问题,但是如何让它显示测试所涉及的实际文件的覆盖范围?
我正在尝试mocha使用istanbul全局安装的代码覆盖:
我按照这里的建议这样做
E:\Do\learn_mocha>istanbul cover _mocha -- -R spec
C:\Users\Vamsi\AppData\Roaming\npm\_mocha.CMD:1
(function (exports, require, module, __filename, __dirname) { @IF EXIST "%~dp0
^
No coverage information was collected, exit without writing coverage information
SyntaxError: Unexpected token ILLEGAL
at Module._compile (module.js:439:25)
at Module._extensions..js (module.js:474:10)
at Object.Module._extensions..js (C:\Users\Vamsi\AppData\Roaming\npm\node_mo
dules\istanbul\lib\hook.js:102:13)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at runFn (C:\Users\Vamsi\AppData\Roaming\npm\node_modules\istanbul\lib\comma
nd\common\run-with-cover.js:114:16)
at C:\Users\Vamsi\AppData\Roaming\npm\node_modules\istanbul\lib\command\comm
on\run-with-cover.js:232:17
at C:\Users\Vamsi\AppData\Roaming\npm\node_modules\istanbul\lib\util\file-ma
tcher.js:56:16
at C:\Users\Vamsi\AppData\Roaming\npm\node_modules\istanbul\lib\util\file-ma
tcher.js:35:9
Run Code Online (Sandbox Code Playgroud)
此命令也会抛出与上面相同的错误:
E:\Do\learn_mocha>istanbul cover --hook-run-in-context _mocha -- -R spec …Run Code Online (Sandbox Code Playgroud) 我很困惑,我看到人们都使用这两种方式.它们都是代码覆盖率报告工具.因此,只是人们正在使用伊斯坦布尔功能,并希望使用工作服UI而不是伊斯坦布尔html输出文件作为一个更好的覆盖运动员,是吗?这是两个使用的原因??
请问有谁能解决这个问题吗?我有我的测试:覆盖范围定义如下.
scripts{
"test:coverage": "babel-node ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha ./src/_utils/__tests__/*.js"
}
Run Code Online (Sandbox Code Playgroud)
当我跑
npm run test:coverage
Run Code Online (Sandbox Code Playgroud)
我的摩卡运行良好,其他一切都好.但我的伊斯坦布尔报道最后会在标题中返回消息.此外,我的coverage文件夹仍为空.通过在线阅读后,我确信我必须添加.istanbul.yml文件.然后我继续并在下面添加它
verbose: false
instrumentation:
root: ./node_modules/.bin/istanbul
default-excludes: true
excludes: []
embed-source: false
variable: __coverage__
compact: true
preserve-comments: false
complete-copy: false
save-baseline: false
baseline-file: ./coverage/coverage-baseline.json
reporting:
print: summary
reports:
- lcov
dir: ./coverage
watermarks:
statements: [50, 80]
lines: [50, 80]
functions: [50, 80]
branches: [50, 80]
hooks:
hook-run-in-context: false
post-require-hook: null
Run Code Online (Sandbox Code Playgroud)
在我运行测试后:再次覆盖,之前的伊斯坦布尔错误消失了.但是,标题中的无覆盖消息仍然存在,并且更多覆盖文件夹仍然为空.请问我哪里出错了?任何帮助,将不胜感激.
我正在尝试为我的Karma测试添加代码覆盖率,但是虽然它找到了我正在测试的正确的JS文件,但它找不到这些文件中的函数.
从我到目前为止所读到的内容来看,我认为在传递给伊斯坦布尔进行报道之前,文件没有被正确浏览,但不可否认我是新手,所以我希望能提出一些建议.
这是我的JS文件(common.js):
var applicationSettings = require('./settings');
var common = {
getAjaxBaseUrl: function () {
var strVirtualDirectory = applicationSettings.VirtualDirectory;
if (strVirtualDirectory.length > 1) {
if (!strVirtualDirectory.startsWith("/")) {
strVirtualDirectory = "/" + strVirtualDirectory;
}
}
return strVirtualDirectory;
}
}
module.exports = common;
Run Code Online (Sandbox Code Playgroud)
这是我写的测试:
it('Client - Should get correct AjaxBaseUrl with /', function () {
var clientSettings = require('./../client/scripts/settings');
var clientCommon = require('./../client/scripts/common');
clientSettings.VirtualDirectory = '/VD';
expect(clientCommon.getAjaxBaseUrl()).to.equal('/VD');
});
it('Client - Should get correct AjaxBaseUrl without /', function () {
var clientSettings = …Run Code Online (Sandbox Code Playgroud) 在我的项目中,有声纳扫描仪,它仅分析 *.js 文件(可能有这样的配置等)。我还有伊斯坦布尔代码覆盖率,它生成带有结果的完美 lcov 文件。
此 lcov 文件引用了 Sonar 未分析的 *.ts 文件。那么问题是如何告诉Sonar分析*.ts文件而不是*.js文件?
现在我得到这样的东西 -
Could not resolve 10 file paths in [coverage.lcov], first unresolved path:
[path]/test.ts .
Run Code Online (Sandbox Code Playgroud)
我真的很感激任何帮助,如果有人可以分享他们的工作配置文件,那就太好了sonar-project.properties。
上图显示了我的一个文件夹的SonarQube覆盖率,但是如果您对该文件夹中所有文件的百分比取平均值,则该百分比为49%,而SonarQube将显示31.4%。如果不采用平均值,SonarQube如何计算总体覆盖率?对于所有文件夹,即使是最顶层的文件夹,也是如此。
我使用 Karma 运行单元测试并生成覆盖率报告,但是,似乎彩色部分(如这些红色代码)异常移动,如下所示:
相关的库版本有:
"@angular/core": "^6.1.0",
"@angular/cli": "^6.1.1",
"@angular/compiler-cli": "^6.1.0",
"jasmine-core": "~3.1.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~2.0.5",
"karma-chrome-launcher": "~2.2 .0",
"karma-cli": "~1.0.1",
"karma-coverage-istanbul-reporter": "^2.0.1",
"karma-jasmine": "~1.1.0",
"karma- jasmine-html-reporter": "^1.2.0",
该test.ts是:
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/long-stack-trace-zone';
import 'zone.js/dist/proxy.js';
import 'zone.js/dist/sync-test';
import 'zone.js/dist/jasmine-patch';
import 'zone.js/dist/async-test';
import 'zone.js/dist/fake-async-test';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
// Unfortunately there's no typing for the `__karma__` …Run Code Online (Sandbox Code Playgroud) 我正在运行一个用 Typescript 编写的 VueJS 应用程序,并使用 Cypress e2e 测试对其进行测试。我想要设置覆盖率报告,以了解测试覆盖了多少代码,因此我尝试集成 Istanbul JS。Istanbul JS 和 Cypress 的文档使这看起来完全可行,但没有什么比看起来那么容易。请注意下面的输出,尽管该应用程序有数百个文件和基本 Vue 文件,但仅报告了 3 个文件main.ts和 ,router.ts甚至没有包含在内。其余文件在哪里以及如何获取 Vue 应用程序的完整覆盖率报告?
我根据赛普拉斯代码覆盖率文档进行了项目设置设置了我的项目,其中包含以下文件:
babel.config.js
module.exports = {
presets: [
[
'@vue/app',
{
useBuiltIns: 'entry',
},
],
],
plugins: [ 'istanbul' ],
}
Run Code Online (Sandbox Code Playgroud)
nyc.config.js
module.exports = {
extends: '@istanbuljs/nyc-config-typescript',
all: true,
extension: [
'.vue',
'.ts',
],
include: [
'src/**/*.{vue,ts}',
],
}
Run Code Online (Sandbox Code Playgroud)
包.json
"scripts": {
"e2e": "NODE_ENV=production vue-cli-service test:e2e --mode 'e2e'",
"coverage": "npm run e2e …Run Code Online (Sandbox Code Playgroud) 假设我有这些报道报告:
现在我想合并这些报告并生成一个 html 报告。
我正在使用伊斯坦布尔联合收割机来完成此类工作。但似乎找不到所有这些覆盖 json 文件,我想知道为什么会这样。
istanbul-combine -d coverage/reports -r lcov -r html /coverage/libs/test/**/coverage-final.json
在报告生成过程结束时,它为我提供了一个空的 html 报告。
istanbul ×10
javascript ×4
node.js ×3
angular ×2
sonarqube ×2
typescript ×2
unit-testing ×2
browserify ×1
coveralls ×1
cypress ×1
jasmine ×1
jestjs ×1
jscoverage ×1
karma-runner ×1
mocha.js ×1
sonarqube7 ×1
vue.js ×1
windows ×1