7

Rails 4 を使用して Rails API を開発しており、それをテストしたいと考えています。そのために、Rspec フレームワークを使用しています。

私の 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

次に、UsersController 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 メソッドを使用して、ヘッダーからトークンを取得します。

before_action メソッドをスキップする方法、または認証ヘッダーを正しく設定する方法を見つけるのを手伝ってくれる人がいれば、とても感謝しています。

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

4

1 に答える 1

10

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

エラーは次のとおりです。

request.env["AUTHORIZATION"] 

でなければなりません

request.env["HTTP_AUTHORIZATION"]. 

それとは別に、テスト環境で作成されていないユーザーから間違ったトークンを取得していました。

:)

于 2013-08-08T07:41:05.200 に答える