我已经阅读了主题Guardfile for running single cucumber feature in subdirectory?,这很有效:当我更改某个功能时,只会由后卫运行。
但是在另一个方向它不起作用:当我编辑任何步骤定义文件时,始终所有功能都会运行,无论他们是否使用任何步骤在步骤定义文件中,是否。
这不太好。我想至少只运行那些使用编辑文件中任何步骤的功能;但更好的是,如果后卫可以看到当前编辑的步骤,然后只运行使用此特定步骤的功能。
我想,第一个不应该那么难。第二个似乎是愿意思考...
答案 0 :(得分:1)
要掌握Guard并为项目和自己的需求提供完美的设置,您必须更改Guardfile
并相应地配置watchers。每个Guard插件附带的模板都会尝试匹配大多数用户最有用的行为,这可能与您的个人偏好不同。
每个Guard插件都以guard
DSL方法开头,后跟一个选项哈希来配置Guard插件。对于不同的Guard插件,选项通常是不同的,您必须查阅插件README以获取更多信息。
在guard
区块do ... end
之间通常配置您的观察者。必须使用RegExp定义观察程序,该Rubular描述要监视的文件。我使用find来测试我的观察者,您可以粘贴从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
dierctory中以features/step_definitions
结尾的每个文件,并尝试匹配步骤定义的功能。请注意RegExp features/step_definitions/(.+)_steps\.rb
中的括号。这定义了一个匹配组,稍后在观察程序块中可用。例如,步骤定义features/step_definitions/user_steps.rb
将匹配,第一个匹配组(m[1]
)将包含值user
。
现在,我们尝试{{3}}所有子目录(**
)中名为user.feature
的匹配文件。如果是这种情况,则运行第一个匹配文件([0]
),或者如果找不到任何内容,则运行所有features
。
所以看起来你的命名步骤与默认的Guard :: Cucucmber Guardfile期望的命名不同,这完全没问题。只需更改观察者以符合您的命名约定。