2013-02-03 92 views
0

我想写一个rspec功能/请求来测试这样一个事实,即在填写表单以在“VIN”模型中创建记录后,用户被重定向到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

# ... 
click_button "generate_vin" 

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

谢谢。我想这种方法的作品。但是,如果我处于同时运行不同测试套件的情况,则不能保证最近创建的Vin是我刚刚创建的。正确?当我到达那里时,我想我可以穿越那座桥。 – Agazoom

0

下面是从RelishApp的例子: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 

看他们怎么办?更改:显示,以:编辑和测试页面的完整性,而不是控制器是否选择了正确的@vin。您将通过向FactoryGirl传递其属性的特定值来获得该值。