2013-08-06 6 views
7

私はrails 4を使ってrails APIを開発しています。テストしたいと思います。それを行うために、私はRspecフレームワークを使用しています。Railsの承認手続き

私のAPIは、このように呼ばれている認証方式があります。

class UsersController < ApplicationController 
# Token authentication 
before_action :set_user, except: [:index, :create] 
before_action :authenticate, except: [:index, :create] 
before_action :authenticate_admin, only: [:index, :create] 

... 
end 

その後、私は私がUserController RSpecのを持っている:私は、テストを実行すると

describe UsersController do 
render_views 
describe "GET /users" do 
    it "gets all users" do 
    @request.env["AUTHORIZATION"] = "Token token=xxxxxxxxx" 
    @request.env["HTTP_ACCEPT"] = "application/json" 
    @request.env["CONTENT_TYPE"] = "application/json" 
    get :index 
    response.status.should be(200) 
    end 
end 
end 

、それはいつも同じことを私に与えます:

UsersController GET /users getting all users 
Failure/Error: response.status.should be(200) 

    expected #<Fixnum:401> => 200 
     got #<Fixnum:803> => 401 
... 

私はauthenticate_or_request_with_http_tokenメソッドを使用してheadeからトークンを取得しますrs。

before_actionメソッドをスキップする方法を見つけたり、認証ヘッダーを正しく設定するのに役立つ人がいたら、私は非常に感謝しています。

ありがとうございました!

+0

あなたのトークン認証と思われる認証方法を確認する必要があります。あるいは、あなたはdeviseなどを使っていますか?一つのことを確認する:あなたはやっていないように見える:インデックスで認証する(あなたがテストしているもの)。 –

+0

コメントありがとうJesse。私はコードをコピーしましたが、インデックスの認証メソッドをコピーするのを忘れていました: before_action:authenticate_admin、only:[:index、:create] authenticate_or_request_with_http_tokenを使って認証します。 ありがとうございます。 – jmolina

+0

私はまだあなたの認証方法を見る必要があります。それはトークンを取得し、あなたのcurrent_userのための検索を実行するでしょうか?さらに、スペック設定中にトークンを使用してユーザーを作成していますか? –

答えて

9

私は最終的にこの問題を解決します。

エラーがされたこと:

request.env["AUTHORIZATION"] 

request.env["HTTP_AUTHORIZATION"]. 

とは別に、私は私のテスト環境で作成されていないユーザーから間違ったトークンを得ていたことがなければなりません。

:)

関連する問題