2011-05-01 2 views
4

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에서 아무것도하지 않는다는 것을 깨달았다. 테스트는 내가 뭘 배치했는지에 관계없이 통과합니다. 그리고 이것은 생성 된 코드에서 복사됩니다 ... 그것에 대한 생각?

+1

공장에서 주소를 addr1로 변경 했습니까? 테스트 환경에서 마이그레이션을 실행 했습니까? – robzolkos

+0

실패를 강제하는 방법을 찾아 냈습니까? 나는 '실패'라고 쓰려고했지만 그 것은 효과가 없었다. 사실 너무 좋은. – Ivan

답변

0

테스트 DB에서 실행되지 않는 마이그레이션과 관련이 있습니다. 당신이

rake spec 

를 실행하면 마이그레이션는 (http://www.ruby-forum.com/topic/170171)에 대해 실행됩니다. 실행할 경우

rspec spec 

자동으로 실행되지 않습니다.

관련 문제