Rspec测试带作用域路由的Rails表单视图时遇路由错误
问题解决:Rspec视图测试中form_for路由错误
问题根源
你的路由定义在:fiscal_year作用域下,所有organization相关路由都必须携带该参数才能生成正确路径。但测试中的form_for仅传入organization对象,Rails无法自动获取fiscal_year参数,导致路由生成失败。
解决方案
1. 修改_form.html.haml中的form_for调用
将单独的organization对象改为包含fiscal_year和organization的数组,让Rails生成带作用域的正确路由:
= form_for [@fiscal_year, organization] do |f| ...
修改后Rails会自动生成符合作用域规则的路径(例如/2024/organizations/1/edit)。
2. 修正测试中的断言路径
测试里的organization_path同样需要传入fiscal_year参数,否则断言的路径会与实际生成路径不匹配:
assert_select 'form[action=?][method=?]', organization_path(@fiscal_year, organization), 'post' do assert_select 'input[name=?]', 'organization[name]' end
补充说明
实际运行时视图正常,是因为控制器中通过before_action等逻辑设置了@fiscal_year实例变量,而测试中虽用assign设置了该变量,但原form_for未使用该参数,导致路由生成逻辑出错。调整form_for参数后,测试逻辑与实际运行逻辑保持一致,即可通过测试。
内容的提问来源于stack exchange,提问作者OnyxRDragon
相关产品推荐
相关产品推荐

