2013-02-19 81 views
1

我試圖測試下面的登錄方法,但它似乎並沒有將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 

在手刷新對象之前,相應地更新值。

回答

4

代碼實際上沒有錯,問題在於rspec沒有及時重裝它。來解決這個問題的一種方法是使用:

@data_provider_user.reload 

手這刷新對象,相應地更新值之前。

0

您確定您正在查看正確的數據庫嗎?當你正在測試它可能會myapp_test(myapp是你稱爲你的應用程序的任何東西)。您可能正在查看您的myapp_development數據庫。

如果您所訪問的數據庫通過rails db機會是你進入你的開發數據庫。如果您使用MySQL,您可以使用select database();進行檢查。如果你想檢查你的測試數據庫,然後使用RAILS_ENV=test rails db。再次,您可以使用select語句來驗證您是否在正確的數據庫中。

+0

我在檢查時使用rails調試器,每次它碰到一個調試器時,我輸入eval @data_provider_user,輸出結果如上。我沒有使用mysql Promt,雖然我看了,但我看不到任何形式的節約。 – Richard 2013-02-19 17:07:56