我试图测试下面的登录方法,但它似乎并没有将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