2013-10-27 21 views
0

我試圖更新請求規範中的記錄,但它沒有更新。在現實生活中做到這一點。這裏是規格:測試更新請求規範中的記錄

describe "sessions" do 
    before do 
    @user = FactoryGirl.create(:user) 
    @api_key = FactoryGirl.create(:api_key) 
    end 

    it "is updated properly" do 
    put "/api/v1/users/#{@user.id}?user_email=#{@user.email}&auth_token=#{@user.authentication_token}", {user: {name: "New Name"}},{ "HTTP_AUTHORIZATION"=>"Token token=\"#{@api_key.access_token}\"" } 
    @user.name.should eq("New Name") 
    response.status.should be(201) 
    end 
end 

上述測試失敗,出現錯誤:

Failure/Error: @user.name.should eq("New Name") 

     expected: "New Name" 
      got: "nil" 

     (compared using ==) 

名稱是一個可選參數,所以我不把它的工廠。例如,如果我確實設置了該行,則表示got: "Bill"

。爲更完整,這裏的工廠:

FactoryGirl.define do 
    sequence :email do |n| 
    "test#{n}@vitogo.com" 
    end 

     factory :user do 
     email   
     password       '12345678' 
     password_confirmation '12345678' 
     goal_id        1 
     experience_level_id  1 
     gender        'Female' 
     factory :admin do 
      after(:create) { |user| user.role = 'admin'; user.save } 
     end 
     end 
    end 

    FactoryGirl.define do 
     factory :api_key do 
     access_token "MyString" 
     end 
    end 
+0

錯誤通常是在您沒有比較相同的東西時。 I.e如果你將一個對象與一個數組進行比較,你會得到這個錯誤。或者如果你將一個數組與一個對象進行比較,你會得到這個錯誤。如果它是一個你正在比較的對象,它需要是'obj <-> obj'(如果有意義的話) – David

回答

1

你只需要你的PUT調用,如後重裝@user@user.reload

+0

如果你的路由接受POST,並且它以同樣的方式執行其他所有操作,它應該可以正常工作。但是如果你的路由是用標準'resources'設置的,那麼POST可能被路由到創建操作而不是更新。嘗試之後記錄'User.all'以查看。 – struthersneil

+0

你是對的!謝謝您的幫助! – Arel

+1

我喜歡它,當一個瘋狂的猜測走到一起:) – struthersneil