【问题标题】:Grunt code coverage doesn't workGrunt 代码覆盖不起作用
【发布时间】:2016-11-15 05:28:18
【问题描述】:

我有以下运行 mocha 测试的 grunt 文件 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

这是我尝试过的咕噜声中的代码

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
            options: {
                specNameSuffix: ["-spec.js"], 
                helperNameSuffix: "helper.js",
                useHelpers: false,
                stopOnFailure: false,
                reporters: {
                    console: {
                        colors: true,            
                    },
                    junit: {
                        savePath: "./test-reports",
                        filePrefix: "testresult",
                    }
                }
            },
            test: {
                specs: [
                    "test/*",
                ]
            },
            makeReport: {
              src: './test-reports/coverage.json',//should I create this file?or its created automatically ?
               options: {
                 type: ['lcov', 'html'],
                   dir: reportDir,
                   print: 'detail'
        }
    },
    coverage: {
        APP_DIR_FOR_CODE_COVERAGE: "./utils/*.js",//HERE IS THE PATH OF THE UTILS Folder which all the js login which I want to test there
        clean: ['build'],
        instrument: {
            files: tasks,//WHAT IS TASKS????
            options: {
                lazy: true,
                basePath: 'build/instrument/'//I DONT KNOW WHAT IT IS???
            }
        },
        reloadTasks: {
            rootPath: 'build/instrument/tasks'//SHOULD I USE IT????
        },
        storeCoverage: {
            options: {
                dir: reportDir
            }
        }
    }
    });


    grunt.loadNpmTasks('grunt-jasmine-nodejs');
    grunt.loadNpmTasks('grunt-istanbul');
    grunt.registerTask('default', ['jasmine_nodejs']);
    grunt.registerTask('cover', ['instrument', 'test',
        'storeCoverage', 'makeReport']);

};

如果有 mocha 代码覆盖率可以帮助它也很好,我希望在我运行测试后能够看到包含所有代码覆盖率的报告。

我希望 为文件夹 utils 和控制器完成覆盖(那里的所有文件)我应该如何配置它?

更新

这是我用于茉莉的,我想我应该换成摩卡

jasmine_nodejs: {
            // task specific (default) options
            options: {
                specNameSuffix: ["-spec.js"], // also accepts an array
                helperNameSuffix: "helper.js",
                useHelpers: false,
                stopOnFailure: false,
                reporters: {
                    console: {
                        colors: true,
                        cleanStack: 1,       // (0|false)|(1|true)|2|3
                        verbosity: 4,        // (0|false)|1|2|3|(4|true)
                        listStyle: "indent", // "flat"|"indent"
                        activity: false
                    },
                    junit: {
                        savePath: "./test-reports",
                        filePrefix: "testresult",
                        consolidate: true,
                        useDotNotation: true
                    }
                }
            },
            test: {
                // target specific options
                options: {
                    useHelpers: false
                },
                // spec files
                specs: [
                    "test/*",
                ]
            }
        },

我应该如何改变它? 我的测试语法类似(jasmine/mocha),我想要的只是运行我的测试并在运行代码覆盖率之后

【问题讨论】:

  • 你愿意用mocha代替jasmine吗?
  • 请记住,“代码覆盖率”只是一个比较行数的指标。 thoughtworks.com/insights/blog/…很容易上手。
  • 还要记住,“测试”只是运行其他代码的代码。它很容易上手。

标签: javascript node.js gruntjs mocha.js istanbul


【解决方案1】:

我会给你一个间接的答案。我之前已经获得了代码覆盖率,但使用了不同的插件(和 mocha)。我不确定您是否愿意将jasmine 换成mocha,但我会说在遇到这个之前我曾为各种代码覆盖插件而苦苦挣扎。我想你会同意配置既简洁又明显。

你想要的插件是grunt-mocha-istbanbul,这里是你Gruntfile的示例配置:

module.exports = function(grunt) {
  grunt.initConfig({
    clean: ['coverage'],
    mocha_istanbul: {
      coverage: {
        src: 'test',
        options: {
          timeout: 20000,
          'report-formats': 'html',
          print: 'summary',
          check: {
            lines: 90,
            statements: 90,
            functions: 100,
            branches: 80
          }
        }
      }
    }
  });
  grunt.loadNpmTasks('grunt-contrib-clean');
  grunt.loadNpmTasks('grunt-mocha-istanbul');
  grunt.registerTask('default', ['clean', 'mocha_istanbul']);
}

【讨论】:

  • 嗨,凯文,谢谢,我不想在它工作后立即切换它:),我应该将 utils& 控制器文件夹的路径放在哪里?我如何运行报告
  • 嗯,就像我说的那样,有很多代码覆盖率插件在尝试配置时非常烦人,要么是因为它们的文档不足,要么是因为 github 页面没有提供一个工作的例子。我只是让你知道我碰巧知道一个不错的覆盖插件,它真的很容易上手。几乎不可能说出为什么您的示例不起作用,除非(某人)已经有该插件的工作示例。
  • 我以前从未使用过 jasmine,但快速阅读后发现它们非常相似。因此,切换并修复测试中的任何细微差异可能对您有利。
  • 嗨,Kevin,我想使用你提到的插件,但是我把测试文件夹的引用放在哪里,比如 utils 和 controllers ?
  • 由于我是新手,请您提供我应该使用的所有代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 2015-11-25
  • 1970-01-01
  • 2020-08-11
相关资源
最近更新 更多