使用Guard

时间:2016-12-22 20:39:44

标签: ruby minitest guard

我正在使用guard-minitest来自动运行我的测试。

我在test/fixtures目录中也有一个骨架gem。

问题是,现在Guard还在骨架gem中运行测试。

如何告诉Guard仅针对我的实际项目运行测试,而不是test/fixtures目录中的任何项目?

我尝试了以下操作,但它无效:

guard :minitest, :exclude => "test/fixtures/*" 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' }
end

编辑:

docs让我觉得我可以添加一个忽略路径,这也行不通:

ignore %r{^test/fixtures/}

guard :minitest do
  watch(%r{^test/(.*)\/?test_(.*)\.rb$})
  watch(%r{^lib/(.*/)?([^/]+)\.rb$})     { |m| "test/#{m[1]}test_#{m[2]}.rb" }
  watch(%r{^test/test_helper\.rb$})      { 'test' }
end

编辑:

如下所述我尝试删除星号,也不起作用:

ignore %r{^test/fixtures/}

guard :minitest do
  watch(%r{^test/test_(.*)\.rb$})
  watch(%r{^lib/(.*/)?([^/]+)\.rb$})     { |m| "test/#{m[1]}test_#{m[2]}.rb" }
  watch(%r{^test/test_helper\.rb$})      { 'test' }
end

3 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为watch(%r{^test/(.*)\/?test_(.*)\.rb$})使用与gem骨架的测试匹配的正则表达式。 所以如果你有这些文件:

test/my_real_tests/test_one.rb
test/my_real_tests/my_gem/test_two.rb

/my_real_tests/my_gem/与第一个(.*)匹配。

添加更具体的正则表达式,使它们不匹配。像watch(%r{^test/my_real_tests\/?test_(.*)\.rb$})这样的东西。或者只需删除(.*)

以下是关于watch如何运作的documentation

另外:为什么test/fixtures中的宝石骨架?好像很奇怪:)

答案 1 :(得分:0)

制作更具体的目录,添加更具体的观察者正则表达式,并添加test_folders:个选项docs

这是我的工作守卫文件和测试目录:

guard :minitest, test_folders: 'test/real' do
  watch(%r{^test/real/(.*)\/?test_(.*)\.rb$})
  watch(%r{^lib/(.*/)?([^/]+)\.rb$})     { |m| "test/real/#{m[1]}test_#{m[2]}.rb" }
  watch(%r{^test/test_helper\.rb$})      { 'test/real' }
end

dir结构:

$ tree -L 2 test
test
├── fixtures
│   └── newgem
└── real
    ├── devify
    ├── test_devify.rb
    └── test_helper.rb

4 directories, 2 files

答案 2 :(得分:0)

我遇到了同样的问题,发现像两个建议的答案一样添加一个诱饵文件夹结构有点hacky。

更好的解决方案IMO是修改你的正则表达式以取消fixtures文件夹:

atomic=False