2013-08-06 20 views
7

Ich entwickle eine Rails API, mit Rails 4, und ich möchte es testen. Um es zu tun, verwende ich Rspec-Framework.Rspec Authorization in Rails

Meine API hat eine authenticate Methode, die wie folgt aufgerufen:

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 

Dann habe ich meine 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 

Wenn ich den Test durchführen, es gibt mir immer das gleiche:

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

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

ich benutze authenticate_or_request_with_http_token Methode von heade Token zu erhalten rs.

Wenn mir jemand helfen kann, die Methode zu finden, um die Methode before_action zu überspringen oder den Header Authentifizierung richtig zu setzen, bin ich sehr dankbar.

Vielen Dank!

+0

Wir müssen die Authentifizierungsmethode sehen, die ich annimmt, tut Ihre Token-Authentifizierung. Oder verwenden Sie vielleicht Gerät oder ähnliches? Eine Sache zu überprüfen: Sie scheinen nicht zu tun: authentifizieren auf Index (was Sie testen). –

+0

Danke für den Kommentar Jesse. Ich habe Code kopiert, aber ich habe vergessen, die Authentifizierungsmethode für den Index zu kopieren: before_action: authenticate_admin, nur: [: index,: create] Ich benutze authenticate_or_request_with_http_token zur Authentifizierung. Danke. – jmolina

+0

Ich muss immer noch Ihre Authentifizierungsmethode sehen. Es wird das Token nehmen und einen Fund für deinen current_user ausführen, oder? Erstellen Sie außerdem einen Benutzer mit Ihrem Token während eines Spezifikations-Setups? –

Antwort

9

Ich endlich das Problem lösen.

Der Fehler war, dass:

request.env["AUTHORIZATION"] 

request.env["HTTP_AUTHORIZATION"]. 

Abgesehen davon, dass sein muss, war ich ein falsches Zeichen von einem Benutzer erhalten, die nicht in meiner Testumgebung erstellt wurde.

:)