2013-02-19 82 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