2014-07-09 4 views
6

Ich habe eine Frage, die wirklich spezifisch ist. Ich möchte keinen Controller-Test machen, sondern einen Anfrage-Test. Und ich möchte Capybara nicht verwenden, weil ich die Benutzerinteraktion nicht testen möchte, sondern nur den Status der Reaktion.Wie Subdomain im Anforderungstest mit Rspec ändern (für API-Test)

Ich habe den folgenden Test unter spec/Anfragen/api/garage_spec.rb

require 'spec_helper' 

describe "Garages" do 

    describe "index" do 
    it "should return status 200" do 
     get 'http://api.localhost.dev/garages' 
     response.status.should be(200) 
     response.body.should_not be_empty 
    end 
    end 
end 

Dies funktioniert. Aber da ich noch mehr Tests machen muss ... gibt es eine Möglichkeit dies zu vermeiden? http://api.localhost.dev

Ich versuchte mit setup { host! 'api.localhost.dev' } Aber es tut nichts. Eine before(:each) Blockeinstellung @request.host zu etwas, natürlich stürzt ab, weil @request ist Null vor dem Ausführen einer HTTP-Anfrage.

Die Routen sind korrekt (und in der Tat sie arbeiten), die in dieser Art und Weise

namespace :api, path: '/', constraints: { subdomain: 'api' } do 
    resources :garages, only: :index 
end 

Antwort

5

Sie eine Hilfsmethode in der spec_helper.rb erstellen können, so etwas wie:

def my_get path, *args 
    get "http://api.localhost.dev/#{path}", *args 
end 

und wird seine Nutzung sein:

require 'spec_helper' 

describe "Garages" do 

    describe "index" do 
    it "should return status 200" do 
     my_get 'garages' 
     response.status.should be(200) 
     response.body.should_not be_empty 
    end 
    end 
end 
+0

Interessante Idee. Aber auf diese Weise sollte jede Aktion ihren eigenen Helfer haben. Ich könnte mehr Code schreiben als den, den ich trocknen möchte! –

+0

@ jonnyjava.net Ich dachte, die Domain ist über alle Tests gleich ... –

+0

Ich habe es versucht, und ich mochte! Du gewinnst! Vielen Dank –

2

Try this:

spec_helper.rb

RSpec.configure do |config| 
    config.before(:each, type: :api) do |example| 
    host! 'api.example.com' 
    end 
end 

Spec-Datei

require 'spec_helper' 

describe "Garages", type: :api do 

    describe "index" do 
    it "should return status 200" do 
     get 'garages' 
     response.status.should be(200) 
     response.body.should_not be_empty 
    end 
    end 
end