2016-04-04 3 views
0

Ich versuche, ein JSON in Rails in Rspec geschrieben zu testen. Ich bin mir nicht sicher über die Syntax. Das habe ich bisher:Einstellung Token und Header in RSPECT Test für JSON API

require 'rails_helper' 

RSpec.describe V1::VersionsController, :type => :controller do 

    before do 
    @token = "0" 
    request.env["Content-Type"] = 'application/vnd.api+json; charset=utf-8' 
    end 

    describe "GET index" do 
    it "renders the index JSON" do 
     @request.headers['Content-Type'] = 'application/vnd.api+json; charset=utf-8' 
     request.env['Content-Type'] = 'application/vnd.api+json; charset=utf-8' 
     params = { token: @token } 
     get :index, :format => :json, token: @token 
     #response.should be_success 
     body = JSON.parse(response.body) 
     ap body 
    end 
    end 
end 

Ich habe es in einer Reihe von verschiedenen Möglichkeiten versucht, wie Sie sehen können. Aber ich bekomme einen 403 Fehler.

Ich verwende Rails 5.0.0.beta3, ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux] und rspec-3.1.

+0

Können wir Ihren Controller-Code und die Methoden sehen, die er verwendet, um eine Anfrage zu authentifizieren? – Genzume

Antwort

0

So stellt sich heraus, das Problem war nicht mit meinem Code, sondern die Tatsache, dass meine Test-Datenbank nicht mit dem Token gefüllt war. Ich hatte eine Rake-Aufgabe dafür und einfach mit RAILS_ENV = test das Problem zu lösen. Auch der Code in meiner Frage ist nicht sehr sauber, da ich eine Menge verschiedener Sachen versuche, um das gleiche Ergebnis zu erzielen. Hier ist die letzte Spezifikation für alle, die daran interessiert sein könnten:

require 'rails_helper' 

RSpec.describe V1::VersionsController, :type => :controller do 

    before do 
    @token = "0" 
    @request.headers['Content-Type'] = 'application/vnd.api+json; charset=utf-8' 
    end 

    describe "GET index" do 
    it "renders the index JSON" do 
     get :index, :format => :json, token: @token 
     body = JSON.parse(response.body) 
     expect(response.status).to eq 200 
     expect(body["meta"]["app_name"]).to eq Rails.application.class.parent_name 
     expect(body["meta"]["app_version"]).to eq ApplicationName.version 
    end 
    end 

end 
Verwandte Themen