1

以下のログイン方法をテストしようとしていますが、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 

オブジェクトを更新する前に、それに応じて値を更新します。

4

3 に答える 3

5

実際にはコードに問題はありませんでした。問題は、rspec が時間内に再ロードしていなかったことです。これを回避する方法は、次を使用することでした。

@data_provider_user.reload 

事前にオブジェクトをリフレッシュし、それに応じて値を更新します。

于 2013-02-20T10:01:19.690 に答える
0

正しいデータベースを見ていますか? テストを行っているときは、おそらくそうなるでしょうmyapp_test(myappはあなたがアプリと呼んだものです)。myapp_developmentデータベースを見ているかもしれません。

rails dbチャンスを介してデータベースにアクセスしている場合は、開発データベースにアクセスしている可能性があります。select database();MySQL を使用しているかどうかを確認できます。テスト データベースを確認する場合は、 を使用しますRAILS_ENV=test rails db。ここでも、select ステートメントを使用して、適切なデータベースにいることを確認できます。

于 2013-02-19T16:23:12.330 に答える