2014-04-03 26 views
0

測試它的行爲作品這應該是很簡單的測試,但由於某些原因,我的測試失敗,請考慮以下模型位:Rspec的失敗,但是當我通過控制器

class User < ActiveRecord::Base 

    def active! 
    update_attribute(:active, true) 
    end 

end 

控制器:

def activate 
    user = User.find_by_uuid(params[:id]) 
    user.active! 

    puts "id #{user.id}" 
end 

測試:

describe 'activate user' do 
    let(:user) { FactoryGirl.create(:user) } 
     before do 
     sign_in user 
     visit activate_user_path(id: user.uuid) 
     puts "id #{user.id}" 
     end 

     it 'should be true' do 
     save_and_open_page 
     user.active.should be_true 
     end 
end 

該測試失敗:

expected: true value 
      got: false 

但是,當我用瀏覽器做到這一點,用戶得到激活沒有問題。我究竟做錯了什麼?這實際上看起來像是一個狡猾的測試,但仍然沒有通過,我花了一個多小時嘗試不同的東西,其中沒有一個工作。

回答

2

問題是規格仍然保留user變量中的User變量,該變量是通過FactoryGirl創建的,並且不知道數據庫中已更改該變量。只需重新加載user,它應該工作:

it 'should be true' do 
    save_and_open_page 
    user.reload.active.should be_true 
end 

Btw。如果active是一個布爾值,你也可以規範這種方式(什麼讀好得多):

user.reload.should be_active 
+0

點上,謝謝你,你真棒 –

相關問題