【问题标题】:Ignore directories with Guard使用 Guard 忽略目录
【发布时间】:2017-05-08 13:30:11
【问题描述】:

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

【问题讨论】:

    标签: ruby minitest guard


    【解决方案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 中有宝石骨架?看起来很奇怪:)

    【讨论】:

    • 您能否在documentation 中添加关于更改test_folders: 选项的参考,然后我可以接受!
    • 当然,它在 Guard 文档中,而不是在 guard-minitest 中
    • 你能看看我编辑的问题吗?我不认为只编辑 watch 有效,我还需要添加 test_folders: 选项,这是一个 minitest 插件选项
    【解决方案2】:

    制作更具体的目录,添加更具体的watcher正则表达式,并添加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
    

    目录结构:

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

    【讨论】:

      【解决方案3】:

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

      IMO 一个更好的解决方案是修改您的正则表达式以否定 fixtures 文件夹:

      watch(%r{^test/(?!fixtures)(.*)\/?test_(.*)\.rb$})

      【讨论】:

        猜你喜欢
        • 2015-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-28
        • 2010-09-12
        • 2011-10-12
        • 2013-06-07
        • 2014-11-20
        相关资源
        最近更新 更多