Il mio approccio a questo è leggermente diverso se sto usando la gemma Jbuilder
che ora è disponibile dal team di Rails. (Questo approccio si applica ad altre gemme che rendono JSON o XML come viste.) Preferisco test unitari sui test funzionali quando possibile, dal momento che possono essere un po 'più veloci. Con Jbuilder puoi trasformare la maggior parte dei test in test unitari.
Sì, sono ancora disponibili test funzionali sul controller, ma ce ne sono pochissimi e non analizzano il JSON. Il test funzionale verifica esclusivamente la logica del controller, non il JSON renderizzato. Un test funzionale per una richiesta valida potrebbe affermare il seguente (RSpec):
assert_response :success
expect(response).to render_template(:show)
expect(assigns(:item).id).to eq(expected_item.id)
Sto solo verificando che è successo, rende il modello, e passa l'oggetto al modello. A questo punto, la vista ha le informazioni necessarie per eseguire il rendering corretto.
Ora testare il JSON renderizzato dall'unità testando la vista di Jbuilder.
describe 'api/v1/items/show.json.jbuilder' do
it 'includes foo' do
assign(:item, account.build(foo: 'bar'))
render
json = JSON.parse(rendered)
expect(json['item']['foo']).to eq('bar')
end
# A bunch of other JSON tests...
fonte
2014-09-06 18:23:51
Non analizzando la risposta JSON essere il modo più semplice? – jdeseno
Avevo l'impressione che i test unitari non richiamassero effettivamente la vista. È il caso? Se sì quale tipo di test è quello che cerco (vedi?) –
Credo che questa domanda sia già stata discussa [qui] (http://stackoverflow.com/questions/336716/how-to-test-json-result-from -rails-funzionali-test). Quello che stai facendo non è unità, ma test funzionale. E rende effettivamente la vista. –