Guard and Cucumber:当我编辑步骤定义时,我只想运行实现此步骤的功能



我已经阅读了主题 Guardfile 用于在子目录中运行单个黄瓜功能?,这很好用:当我更改功能时,只有它将由 guard 运行。

但在另一个方向上它不起作用:当我编辑任何步骤定义文件时,始终运行所有功能,无论它们是否使用步骤定义文件中的任何步骤

这不太好。我至少希望只运行那些使用编辑文件中的任何步骤的功能;但更好的是,如果 Guard 可以看到当前编辑了哪个步骤,然后只运行使用此特定步骤的功能。

我想,第一个应该不难完成;第二个似乎是一厢情愿的想法......

要掌握 Guard 并为您的项目和自身需求提供完美的设置,您必须更改Guardfile并相应地配置您的观察者。每个 Guard 插件附带的模板都会尝试匹配大多数用户最有用的行为,这可能与您的个人偏好不同。

每个 Guard 插件

都以 guard DSL 方法开头,后跟一个选项哈希来配置 Guard 插件。对于不同的 Guard 插件,选项通常不同,您必须查阅插件自述文件以获取更多信息。

guarddo ... end之间,您通常配置观察程序。必须使用 RegEx 定义观察程序,该 RegEx 描述了要监视的文件。我使用 Rubular 来测试我的观察程序,您可以粘贴从find features输出中复制的当前功能,以获得真实文件来测试您的 RegExp。

该行

watch(%r{features/.+.feature})

例如,监视features文件夹中以 .feature 结尾的所有文件。由于没有向观察程序提供块,因此匹配的文件将原封不动地传递到 Guard::Cucumber 进行运行。

观察者

watch(%r{features/support/.+})          { 'features' }

匹配features/support目录中的所有文件,并且由于块始终返回 features ,每次支持目录中的文件更改时,features都会传递给 Guard::Cucumber,因此所有功能都会被执行。

最后一行

watch(%r{features/step_definitions/(.+)_steps.rb}) do |m| 
  Dir[File.join("**/#{m[1]}.feature")][0] || 'features'
end

监视features/step_definitions中以 _steps.rb 结尾的每个文件,并尝试匹配步骤定义的功能。请注意正则表达式features/step_definitions/(.+)_steps.rb中的括号。这将定义一个匹配组,该组稍后可在观察程序块中使用。例如,步骤定义features/step_definitions/user_steps.rb将匹配,第一个匹配组 (m[1]) 将包含值 user

现在我们尝试在所有子目录(**)中找到一个名为 user.feature 的匹配文件。如果是这种情况,则运行第一个匹配的文件([0]),或者如果找不到任何内容,则运行所有features

因此,看起来您命名的步骤与默认的 Guard::Cucucmber Guardfile 所期望的步骤不同,这完全没问题。只需更改观察程序以匹配您的命名约定即可。

最新更新