Angularjs 量角器测试成功运行,但量角器覆盖率报告完全为空

Angularjs 量角器测试成功运行,但量角器覆盖率报告完全为空,angularjs,gruntjs,code-coverage,protractor,angularjs-e2e,Angularjs,Gruntjs,Code Coverage,Protractor,Angularjs E2e,我正在尝试将我当前的AngularJS项目与量角器覆盖范围相结合。请在下面找到package.json和我的量角器配置 Package.json "devDependencies": { "chromedriver": "~2.8.1", "grunt": "~0.4.0", "grunt-contrib-clean": "~0.4.0", "grunt-contrib-copy": "~0.5.0", "grunt-contrib-jshint": "~

我正在尝试将我当前的AngularJS项目与量角器覆盖范围相结合。请在下面找到package.json和我的量角器配置

Package.json

"devDependencies": {
    "chromedriver": "~2.8.1",
    "grunt": "~0.4.0",
    "grunt-contrib-clean": "~0.4.0",
    "grunt-contrib-copy": "~0.5.0",
    "grunt-contrib-jshint": "~0.2.0",
    "grunt-contrib-concat": "~0.1.3",
    "grunt-contrib-uglify": "~0.1.1",
    "grunt-contrib-watch": "~0.3.1",
    "grunt-html2js": "~0.1.0",
    "grunt-karma": "~0.4.4",
    "grunt-protractor-runner": "~1.1.4",
    "grunt-contrib-less": "~0.11.3",
    "grunt-shell": "~0.6.0",
    "selenium": "~2.20.0",
    "grunt-protractor-coverage": "^0.2.1",
    "grunt-istanbul": "^0.2.5",
    "grunt-express-server": "~0.4.5",
    "protractor": "~1.4.0",
    "grunt-contrib-connect": "~0.7.1"
  }
量角器配置

exports.config = {

    seleniumServerJar: '../../node_modules/selenium/lib/runner/selenium-server-standalone-2.20.0.jar',
    chromeDriver: '../../node_modules/chromedriver/lib/chromedriver/chromedriver',
    baseUrl: 'http://localhost:3000/',

    capabilities: {
        'browserName': 'chrome',
        'chromeOptions': {
            'args': ['incognito', 'disable-extensions', 'start-maximized']
        }
    },

    onPrepare: function() {
        exports.server = require('../../server.js');
    },

    specs: ['../e2e/**/*.spec.js'],  

    jasmineNodeOpts: {
        onComplete: function () {},
        isVerbose: true,
        showColors: true,
        includeStackTrace: true,
        defaultTimeoutInterval: 90000
    }
};
我的咕哝任务

grunt.registerTask('test', ['clean:coverage', 'copy:instrument', 'instrument',  'protractor_coverage:chrome', 'makeReport']);

    copy: {
        instrument: {
            files: [{
                src: ['src/app/**/*', '!src/app/**/*.js'],
                dest: 'coverage/e2e/instrumented/'
            }]
        },
    },

    clean: {
        coverage: ['coverage', 'instrumented', 'reports']
    }


    instrument: {
        files: 'src/app/**/*.js',
        options: {
            lazy: true,
            basePath: 'coverage/e2e/instrumented'
        }
    },

    makeReport: {
        src: 'coverage/e2e/instrumented/*.json',
        options: {
            type: 'lcov',
            dir: 'coverage/e2e/reports',
            print: 'detail'             
        }
    },


    protractor_coverage: {
        options: {
            configFile: 'test/config/protractor-config.js', // Default config file
            keepAlive: true, // If false, the grunt process stops when the test fails.
            noColor: false, // If true, protractor will not use colors in its output.
            coverageDir: 'coverage/e2e/instrumented',
            args: {}
        },
        chrome: {
            options: {
                args: {
                    baseUrl: 'http://localhost:3000/',
                    // Arguments passed to the command
                    'browser': 'chrome'
                }
            }
        },
    },
当我尝试运行grunt任务时,所有测试都成功运行,但量角器覆盖率报告完全为空。我尝试了几个选项,但我无法使报告显示出来


问题:我在这里做错什么了吗?如何使量角器覆盖以加载我的src js文件?

您可以尝试添加运行{},如下所示:

protractor_coverage: {
    options: {
        ......
    },
    chrome: {
       ......
    },
    run: {}
},

您可以尝试添加运行{},如下所示:

protractor_coverage: {
    options: {
        ......
    },
    chrome: {
       ......
    },
    run: {}
},

这里有个很棒的人有一个为我工作的黑客()

基本上,您添加了一个e2e测试,从浏览器中写出收集的覆盖率,如下所示:

'use strict';

var fs = require('fs');

describe('Output the code coverage objects', function() {
  it('should output the coverage object.', function() {
    browser.driver.executeScript("return __coverage__;").then(function(val) {
      fs.writeFileSync("coverage/e2e/coverageE2E.json", JSON.stringify(val));
    });
  });
});

我也发布了这个问题的解决方案,以防对他们也有帮助:

这里有个很棒的人有一个适合我的黑客()

基本上,您添加了一个e2e测试,从浏览器中写出收集的覆盖率,如下所示:

'use strict';

var fs = require('fs');

describe('Output the code coverage objects', function() {
  it('should output the coverage object.', function() {
    browser.driver.executeScript("return __coverage__;").then(function(val) {
      fs.writeFileSync("coverage/e2e/coverageE2E.json", JSON.stringify(val));
    });
  });
});

我也发布了这个问题的解决方案,以防对他们也有帮助:

只想添加到simonvandyk答案中。 覆盖率变量不是覆盖率。相反,默认情况下,它似乎附加了日期/时间。您需要做的是设置覆盖率变量 在GrunFile中的instrument task下,添加coverageVariable,如下所示

仪器:{
文件:['js/*.js'],
选项:{
懒惰:是的,
基本路径:“./已检测”,

coverage Variable:“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。 coverage变量不是coverage。默认情况下,它似乎附加了日期/时间。您需要做的是设置coverage变量 在GrunFile中的instrument task下,添加coverageVariable,如下所示

仪器:{
文件:['js/*.js'],
选项:{
懒惰:是的,
基本路径:“./已检测”,

coverage Variable:“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu您的测试实际上使用的是插入指令的文件。这取决于您的服务器/后端,可以通过许多不同的方式来完成。如果您使用的是node,我建议您签出并运行包含量角器覆盖率代码的示例应用程序。是的,*.js文件正在插入指令,代码看起来正在缩小。我们正在使用“grunt量角器覆盖率”依赖项。但在运行“grunt测试”时,控制台中出现“浏览器中没有覆盖对象”警告。可能您的覆盖率服务器未启动。请尝试添加运行:{}任务结束选项:在本次发布后的应答栏中输入代码。您可以查看coverage/e2e/instrumented文件夹,查看您的*.js文件是否已插入指令?如果已插入指令,您将在其中看到许多难看的代码。您必须设置应用程序来加载这些文件,而不是“正常”文件。一旦插入指令,您将看到这些文件请在浏览器调试器中检查它们,确保您的测试实际使用的是插入指令的文件。根据您的服务器/后端,这可以通过许多不同的方式完成。如果您使用的是node,我建议您签出并运行与量角器覆盖代码打包的示例应用程序。是的,*.js文件正在使用检测并缩小代码。我们正在使用“grunt量角器覆盖率”依赖项。但在运行“grunt测试”时,控制台中出现“浏览器中无覆盖对象”警告。可能您的覆盖率服务器未启动。请尝试添加运行:{}任务结束的选项:此postYes之后的应答块中的代码。我们尝试运行:{}。但仍然得到“浏览器中没有覆盖对象”控制台中出现警告。报告也是空的。请详细说明如何连接/启动coverage server?感谢您的有用建议,我们成功生成了报告。您好-您能否通过更新示例或解释来添加您最终如何让他工作?如果您发现任何有用的建议,请说明:)Ev任何东西都与上面的示例相同。但是我们没有复制库文件以移动到用于运行e2e测试用例的检测文件夹中。我们只检测源文件而不是库文件。是的。我们尝试了运行:{}。但是我们仍然得到“浏览器中没有覆盖对象”控制台中出现警告。报告也是空的。请详细说明如何连接/启动coverage server?感谢您的有用建议,我们成功生成了报告。您好-您能否通过更新示例或解释来添加您最终如何让他工作?如果您发现任何有用的建议,请说明:)Ev任何东西都与上面的示例相同。但是我们没有复制库文件以移动到用于运行e2e测试用例的插入指令的文件夹中。我们只插入源文件,而没有插入库文件。