2011-09-02 9 views
21

Come si registra su un controller diverso da quello in cui lo script di test sta attualmente puntando?post su un controller diverso in un test rspec

Esempio: in user_controller_spec.rb

it "should just post to users" do   
    post :create, @params # this goes to the users controller 
    end 

voglio fare qualcosa di simile:

it "should post to user and people to do some integration testing" do   
    post :create, @params # this goes to the users controller still 
    post 'people', :create, @params # this goes to the people controller 
    end 

ps: io non voglio configurare il cetriolo

risposta

28

specifiche del controller sono wrapper per test funzionali di Rails, che non supportano più richieste o controller. Quello che vuoi è una specifica di richiesta RSpec (rails 3) o una specifica di integrazione (rails 2). Questi test di integrazione di Rails avvolgono, che supportano più richieste con più controller (più sessioni, anche), ma funzionano un po 'diversamente dalle specifiche del controller. È necessario utilizzare il percorso completo (in modo da ottenere new_thing_path) e non è possibile eseguire il stub di alcunché sul controller (poiché non è presente alcun controller prima di effettuare una richiesta).

Vedere http://relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec e http://api.rubyonrails.org/classes/ActionDispatch/IntegrationTest.html per ulteriori informazioni.

3

C'è un modo se si assegna il valore di @controller prima del metodo di test della chiamata. Esempio

def setup 

    @controller = UserController.New 

    do user stuff 

    @controller = ThisController.New 

    do test intented for this controller 
end 
+0

fantastico! funziona molto bene per me. – Tilo

+0

Volevo controllare su quale controller è andato a colpire, questo ha aiutato un po '. –

Problemi correlati