标题说明了一切。尽管拖延了互联网,但我还没有找到解决此问题的单个示例。

这是一些差点错过

  • https://github.com/amitayd/grunt-browserify-jasmine-node-example-咕,、浏览器和 Jasmine
  • https://github.com/gotwarlost/istanbul/issues/59#issuecomment-18799734-browserify和 Istanbul 尔

  • 这是我正在进行的代码https://github.com/wheresrhys/on-guard/tree/browserify(请注意,它是“browserify”分支-Gruntfile.js有点困惑,但很快就会整理一下)。我最初使用console.log进行的调查表明,页面中已以某种方式加载了bundle.src.js,但是当测试运行(并通过!)时,就没有运行bundle.src.js中的代码,因此我感到这可能是一个别名问题...尽管仅限于phantomjs,因为当我在chrome中打开specrunner时,代码正在运行。

    最佳答案

    我正在使用grunt-browserify + browserify-istanbul + grunt-contrib-jasmine + grunt-template-jasmine-istanbul作为解决方案。当使用browserify构建源文件时,此解决方案还排除了第三方库

    首先显示代码,稍后再解释,

    grunt.initConfig({
    browserify: {
      // build specs using browserify
      specs: {
        src: ["spec/**/*Spec.js"],
        dest: "spec/build/specs.js",
        options: {
          debug: true
        }
      },
      // build source files using browserify and browserify-istanbul
      dev: {
        options: {
          debug: true,
          browserifyOptions: {
            standalone: 'abc'
          },
          transform: [['browserify-istanbul', {
            ignore: ['**/node_modules/**'], // ignore third party libs
            defaultIgnore: true
          }]]
        },
        src: ['abc.js'],
        dest: 'dist/abc.js'
      }
    },
    connect: {
      server: {
        options: {
          port: 7000
        }
      }
    },
    // test using jasmine, generate coverage report using istanbul
    jasmine: {
      coverage: {
        src: ['dist/abc.js'],
        options: {
          junit: {
                path: 'bin/junit'
            },
          host: 'http://localhost:7000/',
          specs:  'spec/build/specs.js',
          keepRunner: true,
          summary: true,
          template: require('grunt-template-jasmine-istanbul'),
          templateOptions: {
            replace: false, // *** this option is very important
            coverage: 'bin/coverage/coverage.json',
            report: [
              {
              type: 'html',
              options: {
                dir: 'spec/coverage/html'
              }
            }]
          }
        }
      }
    }
    
      grunt.registerTask('specs', ['browserify:specs', 'browserify:dev', 'connect', 'jasmine']);
    

    生成 Istanbul 尔覆盖率报告的步骤可以归纳为三个步骤:
  • 仪器代码
  • 运行测试
  • 生成覆盖率报告

  • 在我们的解决方案中,我们在步骤1中使用browerify-istanbul,在步骤2和3中使用grunt-contrib-jasminerunt-template-jasmine-istanbul
    browserify-istanbul将让您在browserify构建步骤中检测代码,通过这种方式,我们可以轻松地忽略第三方库。但是grunt-template-jasmine-istanbul将再次检测代码。为避免这种情况,您可以在选项中将replace设置为false

    引用:
  • Istanbul steps
  • broswerify-istanbul
  • grunt-contrib-jasmine
  • grunt-template-jasmine-istanbul-replace选项
  • 关于node.js - 生成 Istanbul 尔代码覆盖率报告以在phantomjs中的浏览器打包上运行 Jasmine 测试(通过grunt),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20647019/

    10-12 23:16