Moje podejście do tego jest nieco inna, jeśli używam Jbuilder
klejnot, który jest teraz dostępny z zespołem szyn. (To podejście odnosi się do innych klejnotów, które renderują lub jako widoki.) Preferuję testy jednostkowe w testach funkcjonalnych, gdy tylko jest to możliwe, ponieważ mogą być one trochę szybsze. Dzięki JBolderowi większość testów można przekształcić w testy jednostkowe.
Tak, nadal masz testy funkcjonalne na kontrolerze, ale jest ich bardzo niewiele i nie analizują JSON. Test funkcjonalny testuje wyłącznie logikę sterownika, a nie renderowany JSON. Funkcjonalny test ważnego wniosku może dochodzić następujące (rspec):
assert_response :success
expect(response).to render_template(:show)
expect(assigns(:item).id).to eq(expected_item.id)
Ja tylko sprawdzenie, czy to się powiedzie, to sprawia, że szablon, a przechodzi element do szablonu. W tym momencie widok zawiera informacje potrzebne do prawidłowego renderowania.
Teraz przetestuj JSON renderowany przez jednostkę testując widok JBoader.
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...
Czy parsowanie odpowiedzi jsona nie byłoby najprostszym sposobem? – jdeseno
Miałem wrażenie, że testy jednostkowe faktycznie nie wywołują widoku. Czy tak jest? Jeśli tak, jakiego rodzaju test jest tym, czego szukam (widok?) –
Wierzę, że to pytanie zostało już omówione [tutaj] (http://stackoverflow.com/questions/336716/how-to-test-json-result-from -chałki-testy funkcjonalne). To, co robisz, nie jest jednostką, ale testem funkcjonalnym. I faktycznie renderuje widok. –