我已阅读主题Guardfile 以在子目录中运行单个黄瓜功能?,这很好用:当我更改一个功能时,只有这个会由守卫运行。
但在另一个方向上它不起作用:当我编辑任何步骤定义文件时,总是运行所有功能,无论它们是否使用步骤定义文件中的任何步骤。
这不好。我希望至少只运行那些使用编辑文件中的任何步骤的功能;但更好的是,如果guard 可以看到当前正在编辑哪个步骤,然后只运行使用此特定步骤的功能。
我猜,第一个不应该那么难完成;第二个似乎是一厢情愿的想法......
我已阅读主题Guardfile 以在子目录中运行单个黄瓜功能?,这很好用:当我更改一个功能时,只有这个会由守卫运行。
但在另一个方向上它不起作用:当我编辑任何步骤定义文件时,总是运行所有功能,无论它们是否使用步骤定义文件中的任何步骤。
这不好。我希望至少只运行那些使用编辑文件中的任何步骤的功能;但更好的是,如果guard 可以看到当前正在编辑哪个步骤,然后只运行使用此特定步骤的功能。
我猜,第一个不应该那么难完成;第二个似乎是一厢情愿的想法......
要掌握 Guard 并针对您的项目和自己的需求进行完美设置,您必须相应地更改Guardfile
和配置您的观察者。每个 Guard 插件附带的模板会尝试匹配对大多数用户最有用的行为,这可能与您的个人偏好不同。
每个 Guard 插件都以guard
DSL 方法开头,后跟一个用于配置 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.rb
并features/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 所期望的不同,这完全没问题。只需更改观察者以匹配您的命名约定。