以下のログイン方法をテストしようとしていますが、data_provider_userをデータベースに保存していないようです。デバッガーを使用して確認しましたが、以下に示すように、メソッドを終了してrspecコードに戻るまで完全に機能します。また、.validを使用して保存した後、オブジェクトが有効かどうかを確認しましたか?そしてそれは私が少し迷っているのでです!
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>
どんな助けでも大歓迎です!!
- - - アップデート - - - -
実際にはコードに問題はありませんでした。問題は、rspecが時間内にコードをリロードしていなかったことです。これを回避する方法は、次を使用することでした。
@data_provider_user.reload
オブジェクトを更新する前に、それに応じて値を更新します。