0

所以我试图将guard rspec 仅用于ruby,而不是用于rails。测试运行良好,但唯一的问题是它只查找 spec.rb 文件,而不查找实际文件。所以我有一个失败的arabic_to_roman.rb 和arabic_to_roman_spec.rb。Guardfile 安装在 roman_numerals_kata 目录下。它只查找 _spec.rb 文件而不是 arabic_to_roman.rb。这是 Guardfile 的样子

  1 # A sample Guardfile
  2 # More info at https://github.com/guard/guard#readme
  3 
  4 guard 'rspec' do
  5   watch(%r{^spec/.+_spec\.rb$})
  6   watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  7   watch('spec/spec_helper.rb')  { "spec" }
  8 
  9   # Rails example
 10   watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
 11   watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#     {m[2]}_spec.rb" }
 12   watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#  {m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
 13   watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
 14   watch('config/routes.rb')                           { "spec/routing" }
 15   watch('app/controllers/application_controller.rb')  { "spec/controllers" }
 16 
 17   # Capybara features specs
 18   watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |m| "spec/features/#{m[1]}_spec.rb" }
 19 
 20   # Turnip features and steps
 21   watch(%r{^spec/acceptance/(.+)\.feature$})
 22   watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$})   { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
23 end
24 
4

1 回答 1

2

你的目录结构是什么?

基于此配置,Guard 会在 lib 目录中查找任何 ruby​​ 文件,并将执行嵌套在 spec/lib/ 中的匹配测试。这些详细信息在保护文件的这一行中:watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }.

使用这个 Guardfile(与我的标准项目布局相匹配),您应该具有以下文件夹布局:

BASE_DIR
├── Guardfile
├── lib
│   ├── README
│   └── arabic_to_roman.rb
├── spec
│   ├── lib
│   │   └── arabic_to_roman_spec.rb
│   └── spec_helper.rb

如果不希望符合标准文件夹布局,另一种方法是像这样修改 Guardfile

guard 'rspec' do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^(.+)\.rb$})     { |m| "spec/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec" }
end

请注意,第二个watch命令是在 basedir 中而不是在lib/*

希望这可以帮助 :)

于 2012-12-26T20:47:47.903 回答