要掌握 Guard 并针对您的项目和自己的需求进行完美设置,您必须更改 Guardfile 并相应地配置您的 watchers。每个 Guard 插件附带的模板会尝试匹配对大多数用户最有用的行为,这可能与您的个人偏好不同。
每个 Guard 插件都以 guard DSL 方法开头,后跟一个选项哈希来配置 Guard 插件。不同的 Guard 插件的选项通常不同,您必须咨询插件README 了解更多信息。
在guard 块do ... end 之间,您通常配置您的观察者。必须使用RegExp 定义观察者,它描述了要观察的文件。我使用Rubular 来测试我的观察者,您可以粘贴从find features 的输出中复制的当前功能,以获得真实文件来测试您的正则表达式。
线
watch(%r{features/.+\.feature})
例如监视features 文件夹中以.feature 结尾的所有文件。由于没有提供给 watcher 的块,匹配的文件原封不动地传递给 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。
现在我们尝试find 在所有子目录 (**) 中命名为 user.feature 的匹配文件。如果是这种情况,则运行第一个匹配文件 ([0]),或者如果您没有找到任何内容,则运行所有 features。
所以看起来你命名的步骤与默认的 Guard::Cucucmber Guardfile 所期望的不同,这完全没问题。只需更改观察者以匹配您的命名约定。