我正在使用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
答案 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