我試圖測試下面的登錄方法,但它似乎並沒有將data_provider_user保存到數據庫。我已經使用調試器進行了檢查,它完美地工作,直到它離開方法並返回到rspec代碼,如下所示。我也檢查過,保存使用.valid後對象是否有效?這是我有點失落!rspec不保存到數據庫
def login
require 'TwitterOauth'
@data_provider_user = DataProviderUser.find(params[:id])
if @data_provider_user.twitter?
@request_token = TwitterOauth.request_url
@data_provider_user.access_token = @request_token.token
@data_provider_user.oauth_token_secret = @request_token.secret
if @data_provider_user.save
debugger
redirect_to @request_token.authorize_url
end
end
end
測試:
it "should update the tokens" do
require 'TwitterOauth'
TwitterOauth.stub(:request_url).and_return(@token)
debugger
get :login, {id: @data_provider_user.id}
debugger
@data_provider_user.access_token.should_not eq(nil)
@data_provider_user.oauth_token_secret.should_not eq(nil)
end
調試器輸出:
#<DataProviderUser id: 84, user_id: 63, data_provider_id: 63, username: nil, password: nil, created_at: "2013-02-19 15:21:59", updated_at: "2013-02-19 15:21:59", access_token: nil, update_frequency: nil, oauth_token_secret: nil>
#<DataProviderUser id: 84, user_id: 63, data_provider_id: 63, username: nil, password: nil, created_at: "2013-02-19 15:21:59", updated_at: "2013-02-19 15:22:12", access_token: "186553918-sEAEO2fcvtyO1x99eH4Q4XwVcOYatODCQ5f1TwqD", update_frequency: nil, oauth_token_secret: "gLw2PtUyTZfxIan1gJBnbP7icboXbi98KlUoOn7ycVs">
#<DataProviderUser id: 84, user_id: 63, data_provider_id: 63, username: nil, password: nil, created_at: "2013-02-19 15:21:59", updated_at: "2013-02-19 15:21:59", access_token: nil, update_frequency: nil, oauth_token_secret: nil>
任何幫助將不勝感激!
------ UPDATE -------
有其實也沒什麼錯的代碼,這個問題是rspec的沒有及時重新加載它。解決這個問題的一種方法是使用:
@data_provider_user.reload
在手刷新對象之前,相應地更新值。
我在檢查時使用rails調試器,每次它碰到一個調試器時,我輸入eval @data_provider_user,輸出結果如上。我沒有使用mysql Promt,雖然我看了,但我看不到任何形式的節約。 – Richard 2013-02-19 17:07:56