【发布时间】:2013-05-21 07:37:45
【问题描述】:
我无法让 Guard 在我的 Rails 3.2 项目中运行。我的测试文件夹看起来像默认的 rails 测试结构:
▾ test/
▾ fixtures/
customers.yml
▾ functional/
▾ integration/
▾ performance/
browsing_test.rb
▾ unit/
customer_test.rb
test_helper.rb
我的 Guardfile 看起来像这样:
guard 'minitest' do
# with Minitest::Unit
watch(%r|^test/(.*)\/?test_(.*)\.rb|)
watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
watch(%r|^test/test_helper\.rb|) { "test" }
# with Minitest::Spec
watch(%r|^spec/(.*)_spec\.rb|)
watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
watch(%r|^spec/spec_helper\.rb|) { "spec" }
# Rails 3.2
watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/controllers/#{m[1]}_test.rb" }
watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
# Rails
# watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/functional/#{m[1]}_test.rb" }
# watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
# watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
end
但是在运行警卫时,它只是说它正在监视,但实际上并没有运行 customer_test.rb 中的任何测试,即使我明确要求它运行小测试。如果我使用ruby -Itest test/unit/customer_test.rb 从命令行运行测试,它们会按预期运行。我知道我在 Guardfile 配置中做错了什么,但究竟是什么?
【问题讨论】:
-
您知道 Guard 只是在监视文件更改吗?除非文件更改,否则它不会运行任何东西。编辑您的一个测试文件并保存它,它应该会运行它。
-
@Casper 是的,但我的理解是它应该运行它在启动时找到的所有测试,并且如果我在警卫提示符下明确运行“minitest”,它也应该运行所有测试,并且目前它没有这样做。
标签: ruby ruby-on-rails-3.2 guard minitest