2

Omniauth認証コントローラーのテストを作成しているときにRspecで問題が発生しました。

これが私のroutes.rbです

MyWebApp::Application.routes.draw do

  get "static/index"

  match "login" =>  'user_sessions#new'

  match 'logout' => 'user_sessions#destroy'

  match "api" => "api#content", :via => :get
  match "api/node_tree" => "api#node_tree", :via => :get

  match "/auth/:provider/callback" => "oauth_authorizations#create"
  match "/auth/failure" => "oauth_authorizations#failure"
  match "/auth/:provider" => "oauth_authorizations#blank"

  resources :users do
    resources :apps do
      resources :nodes
    end
  end

  resources :user_sessions
end

oauth_authorization_controller_spec.rb

it "should create a new authorization entry for the user" do
  expect {get :create }.to change(Authorization, :count).by(1)
end

oauth_authorization_controller.rb

class OauthAuthorizationsController < ApplicationController

  def create

  end

end

スペックを実行すると、次のエラーが発生します

Failures: 

  1) OauthAuthorizationsController when a current user session already exists should create a new authorization entry for the user
     Failure/Error: expect {get :create }.to change(Authorization, :count).by(1)
     ActionController::RoutingError:
       No route matches {:controller=>"oauth_authorizations", :action=>"create"}

コントローラコードから明らかなように、{:controller => "oauth_authorizations"、:action => "create"}が存在するため、この背後にある理由を見つけるのを手伝ってください。

4

2 に答える 2

1

gethttp動詞を投稿に置き換えてみてください。

  expect {post :create }.to change(Authorization, :count).by(1)
于 2012-12-30T16:25:28.010 に答える
0

問題は、ルートで指定されたプロバイダーパラメータが

match "/auth/:provider/callback" => "oauth_authorizations#create"

テストに合格しませんでした。

合格するとテストが修正されました。

get :create, :provider => omniauth_hash['provider']

したがって、テストは次のように書き直されます。

it "should create a new authorization entry for the user" do
  expect {get :create, provider => omniauth_hash['provider'] }.to change(Authorization, :count).by(1)
end

これは誰かを助けるかもしれません。

于 2013-01-16T07:29:36.587 に答える