我的Rails 3应用程序中有一个明显的错误。我正在将字段名称从“addr1”更改为“address”(在我的“代理”模型中)。当我尝试拉出编辑页面时,自然会出现以下错误。
undefined method `addr1' for #<Agency:0x00000100ebd0b0>
第20行...
18: <div class="field">
19: <%= f.label :addr1 %><br />
20: <%= f.text_field :addr1 %>
21: </div>
易于修复,但我想写一个rspec测试,它将演示相同的错误(如果我重新介绍它)。我尝试了很多测试。例如,在我的spec / views / agencies / edit.html.erb_spec.rb中,我目前有......
require 'spec_helper'
describe "agencies/edit.html.erb" do
it "renders the complete form" do
assign(:agency, Factory(:agency, :name => "pat"))
render # agencies/edit
rendered.should match(/pat/)
rendered.should match(/Editing agency/)
assert_select "form", :action => agencies_path(@agency), :method => "post" do
assert_select "input#agency_name", :name => "agency[name]"
assert_select "input#agency_addr1", :name => "agency[name]"
end
puts rendered.to_s
end
end
但问题是它通过了!它不会触发我通过浏览器遇到的同样问题。并且,我故意留下了“addr1”的东西......当然,把它拿出去仍然是通过的。我希望第一次渲染会失败。看跌期权......
<div class="field">
<label for="agency_addr1">Addr1</label><br />
<input id="agency_addr1" name="agency[addr1]" size="30" type="text" />
</div>
关于我如何编写规范以显示页面确实正确呈现的任何想法?
感谢
拍
PS。在探索这个过程中,我意识到:name =&gt; “agency [name]”在assert_select中没有任何作用。无论我放在那里,测试都会通过。这是从生成的代码中复制出来的......对此有何看法?
答案 0 :(得分:0)
我敢打赌,这与未在测试数据库上运行的迁移有关。如果你运行
rake spec
为您运行迁移(http://www.ruby-forum.com/topic/170171)。如果你运行
rspec spec
它们不会自动运行。