0

我已阅读主题Guardfile 以在子目录中运行单个黄瓜功能?,这很好用:当我更改一个功能时,只有这个会由守卫运行。

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

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

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

4

1 回答 1

1

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

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

guard块之间,do ... end您通常配置您的观察者。必须使用RegExp定义观察者,描述要观察的文件。我使用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

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

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

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

于 2012-06-28T22:48:22.617 回答