2012-01-12 28 views
1

,当我试图当一个请求到/auth/facebook制成,如描述herehere提供伪造的认证哈希来测试我的OmniAuth登录过程不将请求重定向。问题是,当我打开测试模式时,请求返回为错误,这与未打开测试模式时的行为相同。打开在OmniAuth测试模式下使用黄瓜

user_management.feature

Feature: User management 
    @omniauth_test 
    Scenario: Login 
     Given a user exists 
     And that user is signed in 

web_steps.rb

... 
And /^that user is signed in$/ do 
    visit "/auth/facebook" 
end 
... 

omniauth.rb

Before('@omniauth_test') do 
    OmniAuth.config.test_mode = true 
    p "OmniAuth.config.test_mode is #{OmniAuth.config.test_mode}" 
    # the symbol passed to mock_auth is the same as the name of the provider set up in the initializer 
    OmniAuth.config.mock_auth[:facebook] = { 
     "provider"=>"facebook", 
     "uid"=>"uid", 
     "user_info"=>{"email"=>"[email protected]", "first_name"=>"Test", "last_name"=>"User", "name"=>"Test User"} 
    } 
end 

After('@omniauth_test') do 
    OmniAuth.config.test_mode = false 
end 

成果

Feature: User management 

    @omniauth_test 
    Scenario: Login    # features/user_management.feature:3 
"OmniAuth.config.test_mode is true" 
    Given a user exists  # features/step_definitions/pickle_steps.rb:4 
    And that user is signed in # features/step_definitions/web_steps.rb:40 
     No route matches [GET] "/auth/facebook" (ActionController::RoutingError) 
     ./features/step_definitions/web_steps.rb:41:in `/^that user is signed in$/' 
     features/testing.feature:5:in `And that user is signed in' 

回答

0

问题不在于您的测试。它与您的路由,或者更具体地说与omniauths路由。

你确定你有一个在config/initializers/omniauth.rb中为facebook设置的策略吗?

可以在gemform https://github.com/mkdynamic/omniauth-facebook

得到它此外,请记住添加新策略后重新启动你的web服务器。 (这让我一次;))

0

你应该在测试初始化​​抛出这两个:

request.env["devise.mapping"] = Devise.mappings[:user] 
request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:facebook] 
0

扔在功能/支持omniauth.rb以下,并且你的情况需要FB登录与@ omn​​iauth_test

Before('@omniauth_test') do 
    OmniAuth.config.test_mode = true 

    # the symbol passed to mock_auth is the same as the name of the provider set up in the initializer 
    OmniAuth.config.mock_auth[:facebook] = { 
    :provider => 'facebook', 
    :uid => '1234567', 
    :info => { 
    :nickname => 'test', 
    :email => '[email protected]', 
    :name => 'Test User', 
    :first_name => 'Test', 
    :last_name => 'User', 
    :location => 'California', 
    :verified => true 
    }.stringify_keys! 
    }.stringify_keys! 
end 

After('@omniauth_test') do 
    OmniAuth.config.test_mode = false 
end