Grunt:使用不同的环境/流程运行多个mocha测试

问题描述 投票:2回答:2

我想在不同的环境和数据库上运行多个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'
    ]);
});

当然,它不起作用,两个配置具有相同的名称。我试图通过mochaTest2but重命名第二个配置,但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
2个回答
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

1
投票

我知道这是一个老问题,但是因为我在寻找相同的答案时自己偶然发现它,结果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/

© www.soinside.com 2019 - 2024. All rights reserved.