注意,这是在Rails 4.0.4
的上下文中我试图测试Rails是否正确提供自定义错误页面。
为了让测试环境能够处理像生产这样的错误,我需要改变它的配置。因此,根据this question和this question的指导,我创建了执行此操作的前后过滤器:
feature 'Error pages:', focus: true do
include BaseHelper
before do
Rails.application.config.consider_all_requests_local = false
Rails.application.config.action_dispatch.show_exceptions = true
load "application_controller.rb"
end
after do
Rails.application.config.consider_all_requests_local = true
Rails.application.config.action_dispatch.show_exceptions = false
load "application_controller.rb"
end
scenario "system should return the correct 404 page" do
# ...
end
end
然而,这似乎并不影响事情。仅使用过滤器之前我可以看到(使用save_and_open_page
)应用程序不使用我的错误页面。
environments/test.rb
如果我将相同的设置放入test.rb
,那么测试会正确使用我的自定义错误页面:
# Show full error reports and disable caching
config.consider_all_requests_local = false
config.action_dispatch.show_exceptions = true
当这些设置在配置中就位时,测试按预期工作并返回自定义错误页面。
此外,如果它是相关的,在这两种情况下我都使用自定义的exceptioins_app处理程序:
config.exceptions_app = ->(env) { ExceptionController.action(:show).call(env) }
我不明白为什么在过滤器中所做的完全相同的更改似乎不会影响测试。