标题说明了一切.尽管在网上搜索,我还没有找到解决这个问题的单一例子.
这是一些有些失误
这是我正在进行的代码https://github.com/wheresrhys/on-guard/tree/browserify(注意它是'browserify'分支--Gruntfile.js有点乱,但很快就会整理它).我初步调查使用console.log表明在某种程度上bundle.src.js正在加载页面,但是当测试运行(并传递!)时,代码中bundle.src.js没有运行,所以我觉得它可能是一个别名问题...虽然是一个仅限于phantomjs,因为当我打开chrome中的specrunner时代码正在运行.
我正在使用Karma测试我的JavaScript并获得报道.我正在使用伊斯坦布尔覆盖率报告,这是默认值.这是我的预处理器参数:
preprocessors: {
'framework/**/*.js':'coverage',
'framework/*.js':'coverage',
'!framework/node/**/*.js':'coverage',
'!framework/test/**/*.js':'coverage',
'framework-lib/**/*.js':'coverage',
'!framework-lib/tool-data-api/tool-data-api.js':'coverage'
}
Run Code Online (Sandbox Code Playgroud)
如你所见,我正在尝试使用"!" 作为negate命令,通常与Node一起使用.但是,它不能在这里工作,我的目录都没有被排除.
有什么方法可以做我想要完成的事情吗?
我正在unit test为我的component(Angular2应用程序)编写一个使用Karma-Jasmine.我正在使用Istanbul代码覆盖率报告.
这是我的测试用例,
it('Should Invoke onNext function', async(() => {
const fixture = TestBed.createComponent(LoginComponent);
fixture.detectChanges();
const login = fixture.componentInstance;
spyOn(login, 'onNext');
let email = fixture.debugElement.nativeElement.querySelector("input[name='username']");
email.value = "email";
let nextButton = fixture.debugElement.nativeElement.querySelectorAll("button")[1];
nextButton.click();
fixture.whenStable().then(() => {
expect(login.onNext).toHaveBeenCalled();
})
}));
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我spying on onNext function将验证它是否被调用nextbutton click.它工作正常,测试通过.
但是我的"登录"页面的代码覆盖率报告显示未涵盖onNext函数.

我究竟做错了什么??
如果我不监视onNext函数,该函数也会被覆盖,
it('Should Invoke onNext function', async(() => {
const fixture = TestBed.createComponent(LoginComponent);
fixture.detectChanges();
const login = fixture.componentInstance;
let email = fixture.debugElement.nativeElement.querySelector("input[name='username']");
email.value …Run Code Online (Sandbox Code Playgroud) 我正在使用Qunit框架来测试前端Web应用程序.我需要为代码覆盖生成报告.为此,我试图istanbul通过gulp任务使用.我gulpfile.js看起来像:
var gulp = require('gulp'),
qunit = require('gulp-qunit'),
istanbul = require('gulp-istanbul');
gulp.task('test1', function() {
return gulp.src('test/test.html')
.pipe(qunit());
});
gulp.task('test2', function () {
return gulp.src('lib/*.js')
// Covering files
.pipe(istanbul())
// Force `require` to return covered files
.pipe(istanbul.hookRequire());
});
gulp.task('test3', ['test2'], function () {
return gulp.src('test/test.html')
.pipe(qunit())
// Creating the reports after tests ran
.pipe(istanbul.writeReports())
// Enforce a coverage of at least 90%
.pipe(istanbul.enforceThresholds({ thresholds: { global: 90 } }));
});
Run Code Online (Sandbox Code Playgroud)
运行test3将成功完成但代码覆盖率不会.
输出test3 …
我已经尝试了几个小时,以便为我的新vue(基于打字稿的)项目(由vue-cli v3生成)启动并运行伊斯坦布尔代码覆盖率报告。
每当我运行测试时:(nodemon --exec nyc vue-cli-service test:unit)仅包含.ts文件,即使我已明确设置nyc应包括这些文件:
"nyc": {
"check-coverage": true,
"per-file": true,
"lines": 80,
"instrument": true,
"sourceMap": true,
"statements": 80,
"functions": 80,
"branches": 80,
"include": [
"apollo-server/**/*.{ts,vue}",
"apollo-server/*.vue",
"src/**/*.{ts,vue}",
"src/*.vue"
],
"exclude": [
],
"reporter": [
"lcov",
"text",
"text-summary"
],
"extension": [
".ts",
".vue"
],
"cache": true,
"all": true
}
Run Code Online (Sandbox Code Playgroud)
我也曾尝试设置nyc.instrument与nyc.sourceMap假以允许像这样的WebPack配置自定义加载器:
module.exports = {
baseUrl: process.env.NODE_ENV === 'production'
? '/'
: '/',
configureWebpack: config => {
// if (process.env.NODE_ENV === "coverage") …Run Code Online (Sandbox Code Playgroud) NYC /伊斯坦布尔代码报告工具是否会忽略VueJS组件文件(扩展名为.vue)中的模板和样式标签。是NYC足够聪明,这样做呢?
谢谢。
我正在为 CLI 编写集成测试。所有单元测试都是使用 Jest 编写的,开箱即用,无需任何配置即可生成代码覆盖率,但不幸的是,它不会检测子进程,例如通过 Node 的 spawn 和 fork 命令执行。
我曾尝试按照GitHub 问题上的评论中的建议将纽约引入其中,但它对我不起作用。
我尝试过各种配置(基于上述最初的建议以及这些问题的想法:1、2),但是我要么根本没有覆盖统计数据,要么只覆盖我的单元测试,而不是生成子的集成测试流程。
my 的相关部分package.json配置了 nyc 和 Jest:
"scripts": {
"test": "cross-env NODE_ENV=test nyc --clean jest --coverage",
},
"jest": {
"verbose": true,
"testURL": "http://localhost/",
"globalSetup": "./jest.setup.js",
"transform": {
"^.+\\.js$": "babel-jest"
},
"collectCoverage": false
},
"nyc": {
"include": [
"packages/*/src/**/*.js"
],
"reporter": [
"html"
]
},
Run Code Online (Sandbox Code Playgroud)
我用来execa运行子进程并执行以下操作:
await execa("nyc --reporter none node", args);
Run Code Online (Sandbox Code Playgroud) 我正在尝试为在 docker 容器中运行的单元测试设置覆盖范围。但是,覆盖率报告无法在容器内按预期生成。但是,当命令在容器外部(在 Mac OSX 和 CentOS 上)运行时,它们会成功生成。
我将代码库安装到图像中预先存在的路径。
该图像基于节点:8.11.4
karma v3.1.4
karma-coverage v1.1.2
karma-coverage-istanbul-reporter v2.0.4
karma-webpack v4.0.0-rc.5
istanbul-instrumenter-loader v.3.0.1 。
尝试梳理问题:
__dirname在 karma.conf.js 中将basePath 设置为path.join使用 karma.conf.js 和 webpack 使用的入口点规范所有路径。coverage和istanbul-coverage记者。-u $(id -u):$(id -g)并没有什么区别您想看到什么代码?
docker run --privileged \
-u $(id -u):$(id -g) \
--mount type=bind,source=$(pwd),dst=/home/node/test/ \
-it $DOCKER_IMAGE \
/bin/bash -c …Run Code Online (Sandbox Code Playgroud) 我有一个 JS 项目,它提供了一组利用 Express 和典型的 Express/路由器模式的端点。
const express = require('express');
const router = new express.Router();
router.post('/', async (req, res, next) => { });
router.get('/:abc', async (req, res, next) => { });
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
npm start我可以成功启动用于调用的服务器node ./src/index.js并使端点可用https://localhost:8080
我还可以利用 Postman 等工具或 Karate 等自动化工具成功测试这些端点。
我遇到的问题是,当通过http://localhost:8080行使产品源 JS 时,我似乎无法使用 Istanbul 收集代码覆盖率。
我已经尝试npm start过其次是nyc --all src/**/*.js gradlew test. 后者是测试端点的自动化。这导致 0% 的覆盖率,我假设这是由于没有使用 npm start 运行 nyc 造成的。
接下来我尝试nyc --all src/**/*.js npm start并注意到一些覆盖范围,但这只是启动 Express 服务器的覆盖范围。
接下来,我尝试了 …
我正在使用Gherkin语法的行为驱动开发 (BDD) 方法设计我的测试,并使用Cucumber JS运行我的测试。
我正在使用Cucumber Studio共享报告并与我的业务利益相关者和管理层保持同步。
最近,我需要获取该项目的测试覆盖率报告,并进行了一些研究,但无法决定使用哪个库来获取覆盖率报告以及如何获取。
到目前为止,我已经找到了JSCover、Cucumber Reports和Istanbul来获取测试覆盖率报告,但我不确定如何准确使用它们,以及哪种最适合我的情况与 Cucumber JS 一起使用。
istanbul ×10
node.js ×5
javascript ×3
karma-runner ×3
nyc ×2
angular ×1
browserify ×1
cucumberjs ×1
docker ×1
express ×1
gruntjs ×1
gulp ×1
jestjs ×1
jscoverage ×1
karate ×1
lcov ×1
minmatch ×1
phantomjs ×1
qunit ×1
typescript ×1
ubuntu ×1
vue-cli-3 ×1
vuejs2 ×1