标签: istanbul

AngularJS中$ routeChangeStart的Jasmine单元测试用例

嗨,我正在使用构建应用程序AngularJS,现在我正在测试我的应用程序的单元.我知道如何为服务,控制器等编写单元测试用例.但是我不知道是为了写它$routeChangeStart.

我的app.js中有以下代码

app.run(function ($rootScope, $location, AuthenticationService) {
    $rootScope.$on('$routeChangeStart', function () {
        if (AuthenticationService.isLoggedIn()) {
            $rootScope.Authenticated = 'true';
            $rootScope.Identity = localStorage.getItem('identification_id');
        } else {
            $rootScope.Authenticated = 'false';
            $rootScope.Identity = localStorage.removeItem('identification_id');
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

我编写了这段代码,以确定用户是否已登录我的应用程序中的每个路由.我AuthenticationService为此目的写了一个服务;

app.factory('AuthenticationService', function (SessionService) {
    return {
        isLoggedIn: function () {
            return SessionService.get('session_id');
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

我的会话服务就像;

app.factory('SessionService', function () {
    return {
        get: function (key) {
            return localStorage.getItem(key);
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

Jasmine用来编写测试用例和Istanbul用于代码覆盖.当我运行我的测试Grunt时,我在app.js中得到类似的东西;

在此输入图像描述

这是因为我不在我的测试用例中覆盖这些语句,因为我不知道如何为这段特定的代码编写测试用例.有什么建议?

jasmine angularjs istanbul

5
推荐指数
1
解决办法
2277
查看次数

我怎样才能让istanbul使用node,mocha,jasmine和require js

我有一个现有的测试套件,使用mocha,require和jasmine在node.js中运行正常,测试通过psake powershell脚本运行.我正在尝试添加测试覆盖率,因此要运行单元测试而不是执行:

node unitTest.js

我在做

伊斯坦布尔封面unitTest.js

这似乎工作但只给我关于unitTest.js本身的覆盖信息,但没有给出项目中使用的任何其他实际javascript文件.我猜这是因为require/mocha组合所以它不知道我正在使用的js文件.

我尝试手动检测所有文件作为代码覆盖之前的一步,并在复制/检测文件上运行相同的命令但得到相同的结果.有关使这项工作的任何提示?

这是unitTest.js的最后一部分

    requirejs(['mocha'], function(Mocha) {
var mocha = new Mocha({reporter: (process.env['TEAMCITY_VERSION'] ? 'teamcity' : 'spec')});
// Hack to establish the global variables (sigh)
mocha.suite.emit('pre-require', global, __filename, mocha);

fswalk(__dirname, function(err, results) {
    if (err)
        console.warn(err);
    else {
        var testName = process.argv[2] || "";
        console.log("testName: " + testName);
        var inclusionSuffixes = [testName + '.test.js'];
        var exclusionSuffixes = ['.integration.test.js'];
        var tests = _.filter(results, function (result) {
            var test = function (suffix) { return result.indexOf(suffix) == result.length …
Run Code Online (Sandbox Code Playgroud)

mocha.js node.js requirejs jasmine istanbul

5
推荐指数
1
解决办法
1309
查看次数

如何从istanbul coverage中忽略node.js中的必需文件

在我的代码中我有 var es = require('event-stream');

在我的package.json中,我有

"scripts": {
    "test": "istanbul cover ./node_modules/mocha/bin/_mocha -- -R spec",
}
Run Code Online (Sandbox Code Playgroud)

我只想覆盖我的主文件,但它也涵盖了事件流的文件,所以我得到了类似的东西

=============================== Coverage summary ===============================

Statements   : 24.74% ( 757/3060 )
Branches     : 5.42% ( 88/1625 )
Functions    : 15.56% ( 70/450 )
Lines        : 25.37% ( 735/2897 )
================================================================================
Run Code Online (Sandbox Code Playgroud)

有没有办法只覆盖我自己的代码?

javascript command-line mocha.js node.js istanbul

5
推荐指数
1
解决办法
4477
查看次数

忽略伊斯坦布尔覆盖报告的对象方法

我有一组使用 Mocha 和 jsdom 运行的 Web 应用程序的单元测试。我使用 jsdom 而不是真正的浏览器,以便让我的 mocha 单元测试尽可能快地运行,我们将进行集成测试,将运行 selenium,以测试更多真实的浏览器内容。我也使用 istanbul 来生成代码覆盖率报告,但是有些代码无法使用 Mocha/jsdom 进行测试。以这段代码为例:

var myObject = {
    //...

    /* istanbul ignore next */
    _resizeEvent: function() {
        if(this.props.isActive) {
            //.9 match the scss max-height: 90%, this value needs to be kept in sync with the sass code
            this.getDOMNode().querySelector('.modal__content').style.maxHeight = Math.floor(window.innerHeight * .9) + 'px';
            this.getDOMNode().querySelector('.modal__content').style.maxWidth = Math.floor(window.innerWidth * .9) + 'px';
            this._centerPosition();
        }
    },

    //...
}
Run Code Online (Sandbox Code Playgroud)

由于没有真正的浏览器,这个方法不能真正用jsdom测试。我遇到的问题是,即使我有/* istanbul ignore next */before 对象方法,它仍然告诉我方法中的代码没有被覆盖(而不是只是告诉我它被忽略了)。

有没有一种简单的方法可以完全忽略对象方法及其所有内容,而不必/* istanbul ignore …

javascript unit-testing istanbul

5
推荐指数
1
解决办法
5179
查看次数

可以在伊斯坦布尔全局忽略其他块

我的代码有多个if语句但没有相应的else语句.我一直在/* istanbul ignore else */为所有这些if语句单独添加,以便忽略相应的缺失else块.是否有办法忽略所有遗漏的else陈述?

istanbul

5
推荐指数
1
解决办法
1320
查看次数

为测试模拟流`error`事件

我正在使用最新的istanbul + jasmine-node来编写我的所有测试脚本.

在一些地方,我有一个可读的流可能会发出error事件,我不知道如何在测试环境中模拟这样的事件,以提供代码覆盖.

请问有人建议如何处理这个问题吗?

stream node.js jasmine jasmine-node istanbul

5
推荐指数
1
解决办法
1418
查看次数

ES6 React istanbul没有收集覆盖范围信息,退出时没有编写覆盖范围信息

我在运行测试时遇到问题,代码覆盖率不起作用,我有消息

没有收集覆盖信息,退出时没有编写覆盖范围信息

我使用ES6编写测试,并使用babel来转换代码.

为了解决这个问题,我使用了本次讨论中提供的github项目:https://github.com/gotwarlost/istanbul/issues/496

诀窍是使用

`babel-node ./node_modules/istanbul/lib/cli cover node_modules/mocha/bin/_mocha -- --require test-helper.js --bail --recursive 'src/js/__tests__/**/*.test.js'` 
Run Code Online (Sandbox Code Playgroud)

代替

"istanbul cover node_modules/mocha/bin/_mocha -- --compilers js:babel-core/register --require scripts/test-helper.js --recursive 'src/js/__tests__/**/*.test.js'"
Run Code Online (Sandbox Code Playgroud)

它运行良好,但问题是代码覆盖率只考虑您测试的类,而不是您创建的所有类.

如果我在项目mod.jssrc文件夹中添加新类,则app.js组件的覆盖率为100%.这是合乎逻辑的,因为它已经过全面测试,但在报告中,mod.js该类没有出现在报告中 - 它没有被列为0%测试的类(https://github.com/JakeSidSmith/istanbul-no-coverage).

我试图添加cover -x 'src/js/__tests__/**/*.test.js'但不起作用.我不能混合第一种风格和第二种风格.

另一个问题是,在上面提供的项目示例中,test-helper.js被认为是完全测试的,我无法将其从覆盖范围中排除cover -x.

是否有另一个技巧,使用ES6/mocha和mocha调用正确的代码覆盖babel-core/register

mocha.js ecmascript-6 istanbul reactjs babeljs

5
推荐指数
1
解决办法
3134
查看次数

ReactJS:未测试文件的 Jest 覆盖率报告显示 0% 覆盖率

我尝试使用 jest 测试我的 React 应用程序的未经测试的源 js 文件的代码覆盖率,但震惊地发现它对所有文件的代码覆盖率大多为 0%。component.js使用 Jest测试React 文件的代码覆盖率是否可以,或者我在这里做错了什么。

这是我在 package.json 中指定的 jest 配置:

  "jest": {
    "testEnvironment": "node",
    "collectCoverageFrom" : ["**/src/**/*.js"]
  }
Run Code Online (Sandbox Code Playgroud)

我的覆盖率快照:

覆盖率报告

我不相信 0% 的代码语句正在为所有文件执行。我在这里缺少什么吗?这个报告适用于 es6 应用程序吗?我什至通过弹出 webpack 测试了使用 react cli create-react-app 创建的 react 样板应用程序的代码覆盖率。甚至样板应用程序也将未经测试的 js 文件的代码覆盖率显示为 0%。这是 100% 错误的。对这个结果有什么想法吗?

unit-testing code-coverage istanbul reactjs jestjs

5
推荐指数
1
解决办法
1220
查看次数

nyc 相当于伊斯坦布尔命令

我正在尝试将我的istanbul代码覆盖率命令转换为nyc.

现在似乎nyc是 istanbul 测试覆盖率库的命令行界面。

在伊斯坦布尔,我们会得到这样的报道:

istanbul cover foo.js --dir coverage
Run Code Online (Sandbox Code Playgroud)

然后我们会得到一个像这样的综合报告:

istanbul report --dir coverage --include **/*coverage.json lcov
Run Code Online (Sandbox Code Playgroud)

所以我试图确定等效的命令是什么nyc-

要获得 nyc 的报道,我似乎可以这样做:

nyc node foo.js  # writes coverage data to .nyc_output
Run Code Online (Sandbox Code Playgroud)

但是当我查看 .nyc_output 时,有一堆 .json 文件,但它们似乎没有任何数据。

如果我尝试获取报告,请使用

nyc report --reporter=lcov
Run Code Online (Sandbox Code Playgroud)

该报告命令似乎没有做任何事情,.nyc_output目录看起来和以前一样:

在此处输入图片说明

注意我可以使用配置文件并避免在命令行中使用额外的命令。

istanbul nyc

5
推荐指数
1
解决办法
1199
查看次数

使用ESM时,如何使Istanbul识别代码覆盖率?

我正在使用ESM进行模块加载,然后像这样运行它们...

// More info on why this is needed see (https://github.com/mochajs/mocha/issues/3006)
async function wire(){
    await import("./Sanity.spec.mjs"); 
    await import("./Other.spec.mjs");
    run();
}
wire();
Run Code Online (Sandbox Code Playgroud)

然后我像这样运行这些测试nyc mocha --delay --exit ./test/suite.js。但是当我运行Istanbul时,似乎无法识别我的进口货,因此无法提供承保范围信息...

  3 passing (14ms)

----------|----------|----------|----------|----------|-------------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files |        0 |        0 |        0 |        0 |                   |
----------|----------|----------|----------|----------|-------------------|
Run Code Online (Sandbox Code Playgroud)

我如何才能使Istanbul识别ESM加载的代码?

mocha.js ecma istanbul es6-module-loader

5
推荐指数
1
解决办法
93
查看次数