2014-07-09 16 views
6

Ho una domanda che è veramente specifica. Non voglio fare un test del controller ma un test delle richieste. E non voglio usare Capybara perché non voglio testare l'interazione dell'utente ma solo gli stati di risposta.Come modificare il sottodominio nel test delle richieste con Rspec (per test API)

Ho la seguente prova in spec/richieste/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 

Questo funziona. Ma come devo fare più test .. c'è un modo per evitare di ripetere questo? http://api.localhost.dev

Ho provato con setup { host! 'api.localhost.dev' } Ma non fa nulla. Un blocco @request.host di blocco @request.host a qualcosa, naturalmente si blocca perché @request è nullo prima di eseguire qualsiasi richiesta http.

I percorsi sono impostate correttamente (e di fatto lavorano) in questo modo

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

risposta

5

È possibile creare un helper nella spec_helper.rb, qualcosa come:

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

e il suo utilizzo sarà BE:

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

Idea interessante. Ma in questo modo ogni azione dovrebbe avere il proprio aiuto. Potrei finire di scrivere più codice di quello che voglio asciugare! –

+0

@ jonnyjava.net Ho pensato che il dominio fosse lo stesso in tutti i test ... –

+0

L'ho provato, e mi è piaciuto! Hai vinto! Grazie –

2

Prova questa:

spec_helper.rb

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

il file spec

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