【问题标题】:Can I get RSpec to only run changed specs?我可以让 RSpec 只运行更改的规范吗?
【发布时间】:2018-01-11 18:44:27
【问题描述】:

我有一个用于一个非常大的项目(约 3800 个单独的示例)的测试套件,我正在从 RSpec 2.14 更新到 3.6。

我刚刚为 s/be_true/be true/ 运行了全部替换,但其中一些应该改为 be_truthy,而这些规范都失败了。

我可以从 git diff 中提取更改的行 - 只需做一些工作 - 但我需要将这些输入到 RSpec 的 config.filter_run 中,而且它似乎不喜欢我为 locations 过滤器这样做(当您在命令行上指定 rspec path/to/file:line 时激活的那个);它说“All examples were filtered out; ignoring {:locations=>...}”。

我也可以在around 过滤器中example.run unless example.location.in? changed_specs,但这skips 所有其他人并将它们标记为pending,而不是完全忽略它们;它不能与run_all_when_everything_filtered 的其他过滤器协同工作。 (可能是因为example.location 指的是测试的顶行,但变化是在它下面几行。)

而且我似乎也无法使用它向example.metadata 添加标签然后将其过滤掉。

编辑:我也不想在命令行上指定它们,因为我的测试在rerun 下运行,它一直在运行相同的命令。

还有什么想法吗?

【问题讨论】:

    标签: git rspec


    【解决方案1】:

    您可以通过以下方式运行更改的规范:

    rspec $(git ls-files --modified spec)
    

    如果您还想包含新的未版本化规范,请使用:

    rspec $(git ls-files --modified --others spec)
    

    您可以使用 shell 别名使这个更方便:

    alias rch='rspec $(git ls-files --modified --others spec)'
    

    【讨论】:

    • 这也不错 - 比 PressingOnAlways 的答案紧凑得多,但我认为它有同样的问题
    • 我添加了如何使用别名使其更加紧凑。
    【解决方案2】:

    我找不到直接的方法,但您可以结合 ruby​​ gem 'guard' 和 'watch' 命令来实现,如下面的链接中所述。

    Automatically run RSPec when plain-old Ruby (not Rails) files change

    它对我有用,但您可能需要进一步调整以增强您想要的效果。

    额外的建议,https://github.com/guard/guard-rspec 有很好的支持,如果你想用 'guard-rspec' gem 试试上面的话。

    【讨论】:

      【解决方案3】:

      git status 可能是更好的选择?为什么这样的东西不适合你:

      $ bundle exec rspec $(git status | grep spec | grep "modified:" | cut -b 15-)
      

      来源:https://coderwall.com/p/usrhyq/running-modified-specs-with-git

      【讨论】:

      • 嗯。不错,但是 (1) 我也希望指定行号,并且 (2) 我希望我的 spec_helper 获取相关规格,因为 - 我最初忽略了 - 我有 rspec 在 @ 下运行987654325@.
      • cut -b 15- 对我来说不太管用(它在错误的地方切断了字符串),但awk '{ print $2 }' 做到了。我认为使用awk 可能更可靠,因为它根据空格而不是位置分割字符串。
      猜你喜欢
      • 2019-11-18
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 2012-04-08
      • 1970-01-01
      相关资源
      最近更新 更多