2013-07-13 168 views
0

我的測試有一些問題。ActionController :: RoutingError:沒有路由匹配[PUT] rspec

還有就是我profile_pages_spec.rb

describe "ProfilePages" do 

subject { page } 

describe "edit" do 
    let(:user) { FactoryGirl.create(:user) } 
    let(:profile) do 
    FactoryGirl.create(:profile, user: user) 
    end 
before do 
    login user 
    visit edit_profile_path(profile) 
end 

it { should have_selector('h2', text: 'Заполните информацию о себе') } 

describe "change information" do 
    let(:new_city) { "Ulan-Bator" } 
    let(:new_phone) { 1232442 } 
    let(:new_gamelevel) { "M2" } 
    let(:new_aboutme) { "nfsfsdfds" } 
    let(:submit) { "Сохранить" } 
    before do 
    fill_in "Город",    with: new_city 
    fill_in "Телефон",   with: new_phone 
    select new_gamelevel,  from: "Уровень игры" 
    fill_in "О себе",   with: new_aboutme 
    click_button submit 
    end 
    specify { profile.reload.city.should == new_city } 
    specify { profile.reload.phone.should == new_phone } 
    specify { profile.reload.gamelevel.should == new_gamelevel } 
    specify { profile.reload.aboutme.should == new_aboutme } 
end 
describe "submitting to the update action" do 
    before { put edit_profile_path(profile) } 
    specify { response.should redirect_to(user_path(user)) } 
end 
end 
end 

還有就是我profiles_controller.rb

def edit 
    @profile = current_user.profile 
    end 

    def update 
    @profile = current_user.profile 
    if @profile.update_attributes(params[:profile]) 
    flash[:success] = "Профиль обновлен!" 
    redirect_to user_path(current_user) 
    else 
    render 'edit' 
    end 
end 

輪廓形式:

 <%= form_for(@profile) do |f| %> 

    <%= render 'devise/shared/error_messages', object: f.object %> 

     <div><%= f.label :city, "Город" %> 
     <%= f.text_field :city, :autofocus => true %></div> 

     <div><%= f.label :phone, "Телефон" %> 
     <%= f.number_field :phone %></div> 

     <div><%= f.label :gamelevel, "Уровень игры" %> 
     <%= f.select(:gamelevel,[['Pro', 'Pro'], 
           ['M1', 'M1'], 
           ['M2', 'M2'], 
           ['M3', 'M3']]) %></div> 

     <div><%= f.label :aboutme,"О себе" %> 

     <%= f.text_area :aboutme, placeholder: "Немного о себе...",size: "    40x10"  %></div> 

     <div><%= f.submit "Сохранить", class: "btn btn-primary" %></div> 
    <% end %> 

在Firefox中,我可以小號我的表格和數據將會改變。但在我的天賦我有錯誤:

的ActionController :: RoutingError:沒有路由匹配[PUT]

耙路線:

edit_profile GET /profiles/:id/edit(.:format)型材#編輯

輪廓PUT /profiles/:id(.:format)型材#更新

我不明白我做錯了什麼。

回答

0

問題是PUT HTTP請求必須在profile_path上完成,而不是在edit_profile_path上完成。 edit_profile_path使用GET請求並顯示編輯配置文件表單。它實際上並沒有更新的姿態...

嘗試

before { put profile_path(profile) } 
+0

它的作品。但另一個錯誤:失敗/錯誤:指定{response.should redirect_to(user_path(user))} 預期的響應是重定向到,但重定向到< http://www.example.com/users/sign_in>我認爲設計助手有些問題。 –

相關問題