Rails使用Koala和RSpec测试Facebook方法

时间:2012-10-14 00:08:42

标签: ruby-on-rails facebook-graph-api rspec rspec-rails koala

我正在制作一个使用Rails,Omniauth和Koala的Facebook信息的应用程序。 使用Ryan Bates Facebook Railscasts,我在我的用户模型上使用这个facebook方法,从Facebook的API中获取用户uid,auth_token等。

def facebook
  @facebook ||= Koala::Facebook::API.new(oauth_token)
end

我还有另一个方法调用facebook方法从用户的朋友那里获取信息, 我们称之为facebook_friends

在我的 UsersController show动作中,我有这个:

def show
  @user = User.find(params[:id])
  @friends = @user.facebook_friends
end

所以我在show模板中使用了这两个实例变量。

使用RSpec编写测试

这是我正在尝试的一项测试

feature 'As a logged out user' do
  background do
    @user = FactoryGirl.create(:user)
  end
  scenario 'redirects to root path' do
    visit user_path @user
    page.current_path.should == root_path
  end
end

但是当我运行它时,我收到了这个错误:

1) As a logged out user redirects to root path
 Failure/Error: visit user_path @user
 Koala::Facebook::APIError:
   OAuthException: Invalid OAuth access token.
 # ./app/models/user.rb:45:in `friends_birthday'
 # ./app/controllers/users_controller.rb:7:in `show'
 # ./spec/requests/user_integration_spec.rb:22:in `block (2 levels) in <top (required)>'

因为每次运行测试时我都不想使用有效的访问令牌 如何使用RSpec伪造用户模型上的facebook调用?

1 个答案:

答案 0 :(得分:4)

VCR就是答案,您可以查看有关它的优秀轨道广播http://railscasts.com/episodes/291-testing-with-vcr 您可以在我的示例项目中找到一些示例:https://github.com/lucassus/locomotive/blob/master/spec/features/user_facebook_connect_spec.rb