Rails 3 애플리케이션에 명백한 오류가 있습니다. 나는 필드 이름을 "addr1"에서 "address"(내 "대행사"모델에서)로 변경하는 과정에있었습니다. 그래서 자연스럽게 편집 페이지를 가져 오려고하면 다음과 같은 오류가 발생합니다. 라인 (20)의 주위에rspec에서 어떻게 뷰 실패를 강제합니까?
undefined method `addr1' for #<Agency:0x00000100ebd0b0>
...
18: <div class="field">
19: <%= f.label :addr1 %><br />
20: <%= f.text_field :addr1 %>
21: </div>
쉽게 해결하기 위해,하지만 난 (경우에 내가 그것을 다시 소개) 같은 오류를 보여 것 RSpec에 테스트를 작성하고자합니다. 나는 여러 가지 시험을 시도했다.
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
그러나 문제 ... 내 사양/뷰/기관/edit.html.erb_spec.rb 내가 현재 가지고 예를 들어 그것을 전달하는 것입니다! 브라우저를 통과 할 때와 동일한 문제가 발생하지 않습니다. 그리고, 나는 "addr1"물건을 목적에두고 떠났다. .. 그것을 꺼내는 것은 물론 통과한다. 첫 번째 렌더링이 실패하기를 바랬습니다. puts 쇼 ...
<div class="field">
<label for="agency_addr1">Addr1</label><br />
<input id="agency_addr1" name="agency[addr1]" size="30" type="text" />
</div>
페이지가 실제로 올바르게 렌더링되는 것을 보여주는 스펙을 작성하는 방법에 대한 아이디어는 무엇입니까?
감사
팻
PS. 이것을 탐구하는 과정에서 나는 name => "agency [name]"이 assert_select에서 아무것도하지 않는다는 것을 깨달았다. 테스트는 내가 뭘 배치했는지에 관계없이 통과합니다. 그리고 이것은 생성 된 코드에서 복사됩니다 ... 그것에 대한 생각?
공장에서 주소를 addr1로 변경 했습니까? 테스트 환경에서 마이그레이션을 실행 했습니까? – robzolkos
실패를 강제하는 방법을 찾아 냈습니까? 나는 '실패'라고 쓰려고했지만 그 것은 효과가 없었다. 사실 너무 좋은. – Ivan