当控制器测试仅在 运行 整个套件时看到带有 _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 代码中挖掘表明它没有加载任何路线。
让事情变得更混乱;
rspec
失败
rspec spec/controllers/specific_spec.rb:33
通过
rspec spec/controllers/specific_spec.rb
通过
rspec spec/controllers/
通过
rspec spec/
失败
development
下的代码 运行 按预期工作,只是在测试中我们看到了问题。
哦,哇,所以在我们的一个测试文件中有人(通常 git 责备我,但这次 运行gely 不是!!)添加了
include Rails.application.routes.url_helpers
这可能在 6.0 和 6.1 之间发生了变化,因此包含此文件会 一些事情 。
与我见过的其他测试不同,它们是根据 运行 的顺序失败的,因为它位于文件的顶部,只要 RSpec 加载到文件中,任何顺序都不会通过.
tl;dr,不要以这种方式在你的测试中包含 url_helpers!
将项目从 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 代码中挖掘表明它没有加载任何路线。
让事情变得更混乱;
rspec
失败rspec spec/controllers/specific_spec.rb:33
通过rspec spec/controllers/specific_spec.rb
通过rspec spec/controllers/
通过rspec spec/
失败
development
下的代码 运行 按预期工作,只是在测试中我们看到了问题。
哦,哇,所以在我们的一个测试文件中有人(通常 git 责备我,但这次 运行gely 不是!!)添加了
include Rails.application.routes.url_helpers
这可能在 6.0 和 6.1 之间发生了变化,因此包含此文件会 一些事情 。
与我见过的其他测试不同,它们是根据 运行 的顺序失败的,因为它位于文件的顶部,只要 RSpec 加载到文件中,任何顺序都不会通过.
tl;dr,不要以这种方式在你的测试中包含 url_helpers!