【问题标题】:Grunt : Running multiple mocha tests with different environments/processesGrunt:使用不同的环境/进程运行多个 mocha 测试
【发布时间】:2016-02-09 16:53:45
【问题描述】:

我想在不同的环境和数据库上运行多个 mocha 测试。

一个尝试是创建两个单独的 grunt 配置:

grunt.initConfig({
    // first one
    mochaTest: {
       options: { ... },
       src: ['test/server/*.js']
    },
    // second one
    mochaTest: {
        options: { ... },
        src: ['test/slave/*.js']
    },
    env: {
        dev: { NODE_ENV: 'development' },
        test: { NODE_ENV: 'test' }
    },
});

grunt.registerTask('test', function (target) {
    if (target === 'server') {
        return grunt.task.run([
            'env:test',
            'mochaTest' // the first one
        ]);
    }
    if (target === 'slave') {
        return grunt.task.run([
            'env:dev',
            'mochaTest' // the second one
        ]);
    }
    grunt.task.run([
        'test:server',
        'test:slave'
    ]);
});

当然,这两个配置名称相同是行不通的。我尝试将第二个配置重命名为 mochaTest2,但 grunt 无法识别它。

然后,我尝试将它放在同一个 mochaTest 任务中,但测试是在同一个环境和进程中运行的。

grunt.initConfig({
    mochaTest: {
        server: {
            options: { ... },
            src: ['test/server/*.js']
        },
        slave: {
            options: { ... },
            src: ['test/slave/*.js']
        }
    },
    env: {
        dev: { NODE_ENV: 'development' },
        test: { NODE_ENV: 'test' }
    },
});

grunt.registerTask('test', function (target) {
    if (target === 'server') {
        return grunt.task.run([
            'env:test',
            'mochaTest:server'
        ]);
    }
    if (target === 'slave') {
        return grunt.task.run([
            'env:dev',
            'mochaTest:slave'
        ]);
    }
    grunt.task.run([
        'test:server',
        'test:slave'
    ]);
});

理想的解决方案应该在单独的进程中运行两个 mochaTest(一个用于server,另一个用于slave)。

【问题讨论】:

    标签: node.js gruntjs mocha.js


    【解决方案1】:

    这可能有点不正统,但您可以通过使用两个都能够运行 mocha 测试的独立插件来解决您描述的无法调用“mochaTest”两次的问题。

    安装:

    npm install -save grunt-simple-mocha
    npm install --save grunt-mocha-test
    

    加载:

    grunt.loadNpmTasks('grunt-mocha-test');
    grunt.loadNpmTasks('grunt-simple-mocha');
    

    配置:

    mochaTest: {
          test: {
            src: ['test/*serverTests*.js']
          }
        },
    
    simplemocha: {
          options: {
            ui: 'bdd'
          },
          all: { src: ['test/*slaveTests*'] }
        }
    

    注册任务:

    grunt.registerTask('serverTests', ['mochaTest']);
    grunt.registerTask('slaveTests', ['simplemocha']);
    grunt.registerTask('allTests', ['mochaTest', 'simplemocha']);
    

    执行:

    grunt serverTests  // run just server tests
    grunt slaveTests   // run just slave tests
    grunt allTests     // run both server and slave tests
    

    【讨论】:

      【解决方案2】:

      我知道这是一个老问题,但由于我自己在寻找相同答案时偶然发现了它,结果grunt-mocha-test 支持它的子对象。

      例如,您可以在这里定义运行服务器和从属测试,如下所示:

      grunt.initConfig({
          ... // skipping other details 
          mochaTest : {
              server : {
                  options: { ... },
                  src: ['test/server/*.js']
              },
              slave : {
                  options: { ... },
                  src: ['test/slave/*.js']
              }
          }
      });
      

      然后你可以通过“:”指定子对象来运行它们,比如

      grunt mochaTest:server
      

      grunt.registerTask('slave', ['jshint', 'mochaTest:slave']);
      

      更多信息:https://www.polyglotdeveloper.com/cookbook/2016-03-03-How-to-run-multiple-test-files-in-different-groups-from-mocha/

      【讨论】:

        猜你喜欢
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        • 1970-01-01
        • 2016-03-09
        • 1970-01-01
        • 2013-06-13
        相关资源
        最近更新 更多