簡體   English   中英

Rails-Rspec:測試PUT更新以實際更改模型屬性

[英]Rails - Rspec: test PUT update to actually change Model attributes

我有以下內容:

let(:update_request) { put "/api/v3/account/profile.json", attributes, credentials }

describe "PUT 'update'" do
  before { update_request }

  context "updating normal attributes (no password)" do
    let(:attributes) {
      {
        profile: { first_name: 'John', phone: '02 21231321', email: 'aieie@brazorf.com' }
      }
    }

    it do
      aggregate_failures do
        # expect{response}.to change{current_user.reload.email}.to('aieie@brazorf.com')
        expect(response).to be_success
        expect(current_user.reload.first_name).to eq('John')
        expect(current_user.reload.phone).to eq('02 21231321')
        expect(current_user.reload.email).to eq('aieie@brazorf.com')
      end
    end
  end
...

上面的代碼中被注釋掉的期望失敗,並顯示以下消息:

失敗/錯誤:期望{response}。更改為{current_user.reload.email} .to('aieie@brazorf.com')預期結果已更改為“ aieie@brazorf.com”,但未更改

如何測試對控制器PUT /更新操作的調用是否確實更改了模型屬性?

編輯

如果在失敗測試之前和之后,使用binding.pry檢查並評估current_user ,我會發現它實際上發生了變化。 測試仍然失敗

binding.pry
expect{response}.to change{current_user.reload.email}.to('aieie@brazorf.com')
binding.pry

您應該在期望之前重新加載對象:

current_user.reload
expect(current_user.email).to eq('new@ya.com')

或另一種方式:

it do
  expect do
    subject
    user.reload
  end.to change(user, :email).from('test@ya.com').to('new@ya.com')
end

您已更改了以下期望代碼,以利用從和進行更改

expect {
  put "/api/v3/account/profile.json", attributes, credentials
}.to change{current_user.reload.email}.to('aieie@brazorf.com')

實際上,將請求語句(GET,PUT,POST和DELETE)放置在it塊內是很好的 ,這樣我們就應該能夠使用rspec expec功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM