6

我正在使用 CucumberJS 在我的 NodeJS Web 应用程序上运行测试。

目前,我可以通过执行来运行我所有的 grunt 任务grunt,或者只使用 CucumberJS 任务grunt cucumberjs

但现在我只想执行特定的功能。

例如,假设我有以下功能文件:

  • 登录功能
  • 最喜欢的功能

我只想使用以下命令运行收藏功能测试:

grunt cucumberjs Favourite

这可能吗?


顺便说一句,这是我的gruntfile.js

'use strict';

module.exports = function(grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        ...
        cucumberjs: {
            src: 'features',
            options: {
                steps: 'features/step_definitions',
                format: 'pretty'
            }
        }
    });

    ...
    grunt.loadNpmTasks('grunt-cucumber');

    grunt.registerTask('default', [... 'cucumberjs']);
};
4

3 回答 3

6

我终于找到了一个似乎运行良好的解决方案,基于tags

因此,对于我的每个功能文件,我都添加了一个标签。

例如,对于 Favourite.feature:

@favourite
Feature: Favourite
    As a user of the system
    I would like to favourite items

然后我使用了一个GruntJS 选项来指定我想通过命令行参数运行的标签。

我通过grunt.option()在我的 gruntfile 中调用来做到这一点:

cucumberjs: {
    src: 'features',
    options: {
        steps: 'features/step_definitions',
        format: 'pretty',
        tags: grunt.option('cucumbertags')
    }
}

所以现在我可以像这样从命令行运行 GruntJS:

grunt cucumberjs --cucumbertags=@favourite

它只会运行带有@favourite 标签的功能。耶!

于 2014-02-04T05:21:16.243 回答
0

这是我的任务,允许您按 feature.name 过滤:

https://github.com/webforge-labs/cuked-zombie/blob/master/tasks/cucumber.js (将其下载到“任务”文件夹中,您可以使用以下方式加载它grunt.loadTasks('tasks'):)

像这样配置它(Gruntfile.js):

grunt.loadNpmTasks('grunt-cucumber');

grunt.initConfig({
  cucumberjs: {
    // config for all features when called with: `grunt cucumber`
    all: {
      src: 'features',
      options: {
        steps: "tests/js/cucumber/bootstrap.js",
        format: "pretty"
      }
    },

    // config for single features when called with `grunt --filter some-feature`
    features: {
      src: 'features',
      options: {
        steps: "tests/js/cucumber/bootstrap.js",
        format: "pretty"
      }
    }
  }
});

使用它:

grunt cucumber --filter post

它将运行 post.feature (在您的功能目录中的某个位置)

使用新的 cucumber-js 版本,可以通过功能线运行它: https ://github.com/cucumber/cucumber-js/pull/168

于 2014-06-05T07:30:23.543 回答
0

我还没有用 grunt 测试过它,但是 cucumber 可以选择在不修改 gherkin 文件的情况下执行场景。只需 call cucumber-js --name "Scenario Name",因此我假设发送相同的参数来授予它会完成它的工作。

于 2020-03-13T20:21:53.850 回答