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 メソッドをスキップする方法、または認証ヘッダーを正しく設定する方法を見つけるのを手伝ってくれる人がいれば、とても感謝しています。
ありがとうございました!