2013-02-03 7 views
0

"VIN"모델에서 레코드를 작성하기위한 양식을 채운 후 사용자가 해당 모델로 리디렉션된다는 사실을 테스트하기 위해 rspec 기능/요청을 작성하려고합니다. 방금 작성된 레코드의 edit_path. 여기에 내 현재 테스트가 있습니다 :w/rspec 요청 사양을 테스트하는 방법

describe "Add VIN" do 
    it "can be added on the VIN listing page" do 

     sign_in_as_a_valid_user 
     vin = FactoryGirl.create(:vin) 

     current_path.should == vins_path 
     page.should have_field("vin_text_box") 
     fill_in "vin_text_box", :with => "hello" 
     click_button "generate_vin" 
     current_path.should == edit_vin_path(v.id)) <---- #problem 
    end 
end 

명백한 문제는 공장에서 만들어진 vin이 리디렉션 된 vin과 아무 관련이 없다는 것입니다.

문제는 요청 사양에서 어떻게이 기능을 테스트 할 수 있습니까?

답변

0

데이터베이스에서 가장 최근에 생성 된 Vin을 가져올 수 있습니다. https://www.relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec

require "spec_helper" 

describe "Widget management" do 

it "creates a Widget and redirects to the Widget's page" do 
    get "/widgets/new" 
    expect(response).to render_template(:new) 

    post "/widgets", :widget => {:name => "My Widget"} 

    expect(response).to redirect_to(assigns(:widget)) 
    follow_redirect! 

    expect(response).to render_template(:show) 
    expect(response.body).to include("Widget was successfully created.") 
    end 

end 

그들이 어떻게 참조 :

# ... 
click_button "generate_vin" 

v = Vin.order("id desc").first 
current_path.should eq(edit_vin_path(v.id)) 
+0

감사합니다. 나는이 방법이 효과가있는 것 같아요. 그러나 다른 테스트 스위트를 동시에 실행하는 상황에 있다면 가장 최근에 생성 된 Vin이 방금 만든 테스트라는 보장은 없습니다. 옳은? 내가 거기에 갈 때 내가 그 다리를 건너는 것 같아. – Agazoom

0

여기 RelishApp의 예입니다? 변경 : 표시 : 컨트롤러가 올바른 @vin을 선택했는지 여부 대신 페이지의 무결성을 편집하고 테스트합니다. FactoryGirl에 특성 값 중 하나에 대한 특정 값을 전달하여이 값을 얻을 수 있습니다.

관련 문제