guard-minitest在测试中的类更改时找不到要执行的测试

时间:2013-12-22 16:38:35

标签: ruby unit-testing guard minitest

我创建了一个Gem项目并添加了minitest并保护了依赖项:

  spec.add_development_dependency "minitest", "~> 5.0.7"
  spec.add_development_dependency 'guard-minitest'

我使用minitest-spec,因此所有受测试的代码都位于lib目录和spec中的所有测试中。

我使用相应的设置创建了一个Guardfile:

guard :minitest do
  # with Minitest::Spec
  watch(%r{^spec/(.*)_spec\.rb})
  watch(%r{^lib/(.+)\.rb})         { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^spec/spec_helper\.rb}) { 'spec' }
end

每次修改规范(比如spec/shell/remote_shell_spec.rb)时,测试都会正确执行。

# Running:

.......

Fabulous run in 0.064205s, 109.0261 runs/s, 529.5554 assertions/s.

7 runs, 34 assertions, 0 failures, 0 errors, 0 skips

问题在于,当我修改测试中的代码(比如lib/shell/remote_shell.rb)时,guard会检测到更改,但是没有执行测试:

# Running:



Finished in 0.000824s, 0.0000 runs/s, 0.0000 assertions/s.

0 runs, 0 assertions, 0 failures, 0 errors, 0 skips

1 个答案:

答案 0 :(得分:2)

查看链接的源代码,我发现您的代码已放置在lib/electric_sheeps/shell/remote_shell.rb而非lib/shell/remote_shell.rb中,因此您的规范必须放在spec/electric_sheeps/shell/remote_shell_spec.rb中,以便映射有效

您还可以重写观察者,使其忽略模块文件夹

guard :minitest do
  # with Minitest::Spec
  watch(%r{^spec/(.*)_spec\.rb})
  watch(%r{^lib/electric_sheeps/(.+)\.rb})         { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^spec/spec_helper\.rb}) { 'spec' }
end

但是lib/electric_sheeps.rb的映射不起作用。