我们在业力测试中使用伊斯坦布尔进行代码覆盖.这非常适合跟踪JavaScript中单元测试的代码覆盖率.但是,这不会跟踪HTML模板中的代码覆盖率.
我们的模板中的逻辑非常少,但仍然存在我们想要跟踪的复杂性,并确保我们在测试中正确涵盖了这些复杂性.确保您对所有HTML模板进行适当覆盖的最佳做法是什么?在我们的特定情况下,我们使用ng-if和ng-switch.我们希望确保所有分支都得到适当的覆盖.
我正在尝试获取测试的覆盖率报告,但所有文件的覆盖率输出始终在一行上,显示带有文件路径的require.例如...
然而,测试运行良好.这是一个反应项目,因此我必须在文件和预处理器中包含一些额外的路径以使测试运行.
我不确定我的业力配置是否有问题?这就是我的配置目前的样子......
/* global module */
module.exports = function (config) {
'use strict';
config.set({
autoWatch: true,
singleRun: true,
frameworks: ['browserify', 'jasmine'],
files: [
'node_modules/karma-babel-preprocessor/node_modules/babel-core/browser-polyfill.js',
'node_modules/react/react.js',
'src/**/*.jsx',
'src/**/!(*spec).js'
],
browsers: ['PhantomJS'],
preprocessors: {
'node_modules/react/react.js': ['browserify', 'sourcemap'],
'src/**/*.jsx': ['browserify', 'sourcemap', 'coverage'],
'src/**/!(*spec).js': ['browserify', 'sourcemap', 'coverage'],
},
browserify: {
debug: true,
transform: [ 'babelify' ]
},
reporters: ['progress', 'coverage'],
coverageReporter: {
instrumenters: {isparta: require('isparta')},
instrumenter: {
'src/**/*.js': 'isparta',
'src/**/*.jsx': 'isparta'
},
reporters: [
{
type: 'text-summary',
subdir: normalizationBrowserName
},
{
type: 'lcov', …
Run Code Online (Sandbox Code Playgroud) 我有以下grunt文件运行mocha测试OK(我在运行grunt.js后得到测试结果)现在我想添加一个代码,我使用https://github.com/taichi/grunt-istanbul模块.但是当我运行grunt.js什么都没发生时,任何想法?
我想要的只是在mocha测试运行之后它会运行代码覆盖率和一些报告吗?任何新的代码覆盖都会很棒
这是我的项目结构
myApp
-server.js
-app.js
-test
-test1.spec
-test2.spec
-test-reports
-grunt.js
-utils
-file1.js
-file2.js
-controller
-file1.js
-file2.js
Run Code Online (Sandbox Code Playgroud)
这是我试过的咕噜声中的代码
module.exports = function (grunt) {
var path = require('path');
process.env.RESOURCE_PATH_PREFIX = "../";
var d = new Date();
var datestring = d.getDate() + "-" + (d.getMonth() + 1) + "-" + d.getFullYear() + " " +
d.getHours() + ":" + d.getMinutes();
var npmCommand = path.dirname(process.execPath).concat('/npm');
var reportDir = "./test-reports/" + datestring;
grunt.initConfig({
jasmine_nodejs: {
// task specific (default) options …
Run Code Online (Sandbox Code Playgroud) 我想nyc
ava
和babel
所有人在一起好好相处.我有一个问题,async/await分支显示为未覆盖,所以这是有效的,我无法集成babel-plugin-istanbul
插件进行测试.
我在项目中有两个文件,src/index.js
和src/test.js
.
{
"name": "example",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "ava",
"coverage": "NODE_ENV=test nyc npm run test",
"report": "nyc report --reporter=html",
"report:open": "open ./coverage/index.html",
"cover": "npm run coverage && npm run report && npm run report:open"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"babel-runtime": "^6.26.0",
"bluebird": "^3.5.0",
"lodash": "^4.17.4"
},
"devDependencies": {
"ava": "^0.22.0",
"babel-cli": "^6.26.0",
"babel-plugin-istanbul": "^4.1.4",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.6.0",
"babel-register": …
Run Code Online (Sandbox Code Playgroud) import { Component, OnInit } from '@angular/core';
import { Title } from '@angular/platform-browser';
@Com(I)ponent({
selector: 'app-fruit-cake',(E)
templateUrl: './fruit-cake.component.html',
styleUrls: ['./fruit-cake.component.scss'],
})
expo(E)rt class FruitCakeComponent {
constructor(private _title: Title) {
_title.setTitle('Cake');
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码覆盖率报告显示(E):其他路径未被采用.(I):如果没有采取路径.在import语句和装饰器的上下文中它意味着什么?由于这个原因,我的任何测试中的代码覆盖率都未达到100%.我该如何纠正呢?
我在 Puppeteer 的帮助下编写了一个小型爬虫。现在我面临的挑战是我的测试相当缓慢(每次测试 > 3 秒)。我已经能够将其追踪到launch
Puppeteer的功能和Istanbul/nyc的使用。
mocha
,测试将在 400 毫秒内完成。nyc
,测试的持续时间超过 3000 毫秒我正在使用的只是
'use strict';
const puppeteer = require('puppeteer');
module.exports = async function startBrowser() {
const options = {
args: [
// '--no-sandbox',
// '--disable-setuid-sandbox',
// '--disable-dev-shm-usage',
// '--disable-accelerated-2d-canvas',
// '--disable-gpu'
],
headless: false // true
};
return await puppeteer.launch(options);
};
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的测试:
'use strict';
/* global describe: false, before: false, it: false,
beforeEach: false, afterEach: false, after: false, window: false, …
Run Code Online (Sandbox Code Playgroud) 我有一个问题,如果我在没有--coverage
选项的情况下运行我的测试,一切都会通过,但是一旦我jest
使用该--coverage
选项运行,我的一些测试就会失败。
这是日志:
Button › Primary button › should render a primary button
undefined:3:457: property missing ':'
at Object.it (src/components/Buttons/Button/Button.test.js:13:24)
at Promise.resolve.then.el (node_modules/p-map/index.js:46:16)
Run Code Online (Sandbox Code Playgroud)
和测试:
it('should render a primary button', () => {
const props = { primary: true };
const rendered = renderer.create(<Button { ...props }>Some Button</Button>).toJSON();
expect(rendered).toMatchSnapshot();
});
Run Code Online (Sandbox Code Playgroud)
失败的线路是 expect(rendered).toMatchSnapshot();
有人有什么想法吗?
Jest 允许您在 package.json 中指定覆盖率报告器,如下所示
{
...
"jest": {
"coverageDirectory": "./coverage",
"coverageReporters": ["json", "text", ...]
}
...
}
Run Code Online (Sandbox Code Playgroud)
但是,这仅将.json
摘要输出到覆盖目录。它仅将文本版本打印到控制台。有没有办法将文本版本.txt
也输出到覆盖文件夹中的文件中?
我一直在参考这里的文档,它说它与任何伊斯坦布尔记者兼容。文本“伊斯坦布尔记者”似乎支持写入文件。有什么办法可以利用它吗?
我在 ReactJS 项目中使用 jest 和 istanbul 来编写测试用例并检查测试覆盖率。
我如何确保使用预提交钩子来测试我已暂存到 git 的任何文件的测试覆盖率,在提交之前不会从其当前值减少?
我正在尝试玩笑测试的覆盖率功能,但输出显示测试引用的文件的 100% 覆盖率,但根本没有覆盖..大多数情况下它们只是经过测试的模块的依赖项,我还远远没有使用它们的所有导出方法。知道为什么我会收到这种幻影保险吗?感谢您的任何提示
--------------------------------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
--------------------------------------|----------|----------|----------|----------|-------------------|
All files | 6.93 | 5.48 | 3.22 | 7.18 | |
src | 10.11 | 10.53 | 5.88 | 10.11 | |
const.ts | 100 | 100 | 100 | 100 | |
utilities.ts | 100 | 100 | 100 | 100 | |
... etc
Run Code Online (Sandbox Code Playgroud)
utility.ts 有多种导出方法,但尚未测试任何方法,因此被视为 100% 覆盖:/
我没有用谷歌搜索到任何类似的案例。大多数人问为什么他们的测试覆盖率不是 100% :D
istanbul ×10
jestjs ×4
nyc ×3
javascript ×2
node.js ×2
reactjs ×2
angular ×1
angularjs ×1
ava ×1
babel ×1
browserify ×1
ecmascript-6 ×1
git ×1
gruntjs ×1
html ×1
jasmine ×1
mocha.js ×1
puppeteer ×1
unit-testing ×1