当控制器测试仅在 运行 整个套件时看到带有 _path 助手的视图文件时,什么可能导致 RSpec 失败

What could cause RSpec to fail when a controller test sees a view file with a _path helper only when when running the entire suite

将项目从 Rails 6.0 升级到 6.1 后,RSpec 在任何控制器或请求规范上失败,最终导致视图文件包含任何形式的 _url_path 助手。

最简单的例子可以写成;

it 'gets blah' do
  get '/blah'
end

如果 /blah 上面只有一些文本,则不会发生任何爆炸,但是如果我们将 <%= root_path %> 添加到该视图(并且已设置根目录),那么我将收到此错误;

Failure/Error: <%= root_path %>

      ActionView::Template::Error:
        wrong number of arguments (given 4, expected 0..1)

这对于我发现的几乎所有路径助手都是一样的。最初发现该问题是因为 form_with(modal: blah) 失败,因为 polymorphic_mappings 无法在 nil 上调用,一些在 Rails 代码中挖掘表明它没有加载任何路线。

让事情变得更混乱;

development 下的代码 运行 按预期工作,只是在测试中我们看到了问题。

哦,哇,所以在我们的一个测试文件中有人(通常 git 责备我,但这次 运行gely 不是!!)添加了

include Rails.application.routes.url_helpers

这可能在 6.0 和 6.1 之间发生了变化,因此包含此文件会 一些事情

与我见过的其他测试不同,它们是根据 运行 的顺序失败的,因为它位于文件的顶部,只要 RSpec 加载到文件中,任何顺序都不会通过.

tl;dr,不要以这种方式在你的测试中包含 url_helpers!