我正在尝试编写一个rspec函数/请求来测试这样一个事实:在填写表单以在“VIN”模型中创建记录之后,用户被重定向到刚刚创建的记录的edit_path。这是我目前的测试:
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 :(得分:0)
您可以从数据库中获取最近创建的Vin
。
# ...
click_button "generate_vin"
v = Vin.order("id desc").first
current_path.should eq(edit_vin_path(v.id))
答案 1 :(得分: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传递一个属性的特定值来获得它。