嘿,所以我写了一个新功能,并通过Spork运行我的测试服,我得到了一个失败的视图测试。这将是我第一次看到视图测试,所以它有点令人困惑。
我得到以下错误
ActionView::Template::Error:
No route matches {:controller=>"employment_equity", :action=>"update_percentage_of_black_youth", :method=>:put, :scorecard_id=>123456, :id=>nil}
它正在测试的视图看起来像这样(我使用sass和haml,所以#不是一个注释,它引用一个id标签)
- if current_scorecard.base_charter_is? :transport_public_sector
.left
#percentage_of_employees_that_are_black_youth_input= f.field :percentage_of_employees_that_are_black_youth, :class => :percentage
.left
.auto_sum_link= link_to('Percentage from Details', update_percentage_of_black_youth_path(current_scorecard.id, @employment_equity.id), :method => :put, :remote => true)
正如你所看到的,我添加了:remote_true
到我的link_to
,这样我就可以得到ajax在飞行中填写该文件。问题是它在抱怨没有路线。
当我有它!
match '/scorecards/:scorecard_id/employment_equity/:id/update_percentage_of_black_youth', :controller => 'employment_equity', :action => 'update_percentage_of_black_youth', :method => :put, :as => 'update_percentage_of_black_youth'
然后点击ajax用我在模型
中计算出的新值填充字段$("#percentage_of_employees_that_are_black_youth_input input").val(<%= @employment_equity.percentage_of_employees_that_are_black_youth %>).effect("highlight", {color: "#C3EC97"}, 3000);
这一切都工作在我的开发环境和我的单元测试都工作只是不能弄清楚为什么它不呈现,因为一个链接传递到ajax?有人发现类似的问题吗?
在RSpec/Capybara等中默认不支持Ajax。原因是javascript只在浏览器中运行。您是否使用Selenium或其他允许测试javascript的框架?
所以我和我旁边的那位大胡子朋友聊了聊,看看我是否提出了这个问题,他发现了问题所在,我的路由正在寻找id
match '/scorecards/:scorecard_id/employment_equity/:id/update_percentage_of_black_youth'
和测试没有给出ID
,因为它没有保存分解类
No route matches {:controller=>"employment_equity", :action=>"update_percentage_of_black_youth", :method=>:put, :scorecard_id=>123456, id=>nil}
对不起,这个错误是超级不透明的