2012-09-26 14 views
17

Come testare un controller in Rspec se il controller risponde solo con javascript? Per esempio, questo sarebbe il mio codice vero e proprio:Test del controller Rspec con Javascript

alcuni view.html.erb

link_to 'More Chips', add_chips_path, :remote => true 

chips_controller

def add_chips 
    Chips.create(:color => :red) 
    @chips = Chips.all 
end 

add_chips.js.erb

$('#chip_count').html('<%=j render("chips/list", :chips => @chips) %>'); 

Rspec test

spe c/controller/chips_controller_spec

it "should add chips" do 
    post :add_chips, :format => 'js' 
end 

Quando provo a postare messaggi in questo utilizzando RSpec ottengo un errore di modello mancante perché è l'invio di una richiesta di HTML, ma non c'è una visualizzazione HTML. Ho provato a passare in un formato ma non sembra funzionare. So di poter inserire una vista html "fittizia" per farlo passare ma sembra un trucco.

Grazie

risposta

15

Ok, ho capito quello che stavo facendo male. Stavo passando un hash dei parametri con il mio test e il formato deve essere incluso nello stesso hash. Così, invece di questo:

@params = {:chip_color => 'red'} 
... 
post :add_chips, @params, :format => 'js' 

Ha bisogno di assomigliare a questo

@params = {:chip_color => 'red', :format => 'js'} 
... 
post :add_chips, @params 
43

Se stai cercando di eseguire una richiesta Ajax da una specifica di controllo, invece di fare post :add_chips e passando il format come parametro, si dovrebbe fare:

xhr :post, :add_chips, @params 

... senza format in params. Ciò comporterà una richiesta JavaScript e risponderà con il modello .js.

Aggiornamento:

Nelle recenti versioni di Rails/RSpec, si dovrebbe invece fare:

post :add_chips, params: @params, xhr: true 
+1

Ha lavorato come fascino! – Surya

Problemi correlati