Mi aproximación a esto es ligeramente diferente si estoy usando la gema Jbuilder
que ya está disponible en el equipo de rieles. (Este enfoque se aplica a otras gemas que rinden JSON o XML como vistas). Prefiero las pruebas unitarias sobre las pruebas funcionales siempre que sea posible, ya que pueden ser bastante más rápidas. Con Jbuilder puede transformar la mayoría de las pruebas en pruebas unitarias.
Sí, todavía tiene pruebas funcionales en el controlador, pero hay muy pocas y no analizan el JSON. La prueba funcional únicamente prueba la lógica del controlador, no el JSON renderizado. Una prueba funcional para una petición válida podría afirmar lo siguiente (RSpec):
assert_response :success
expect(response).to render_template(:show)
expect(assigns(:item).id).to eq(expected_item.id)
Sólo estoy verificando que éste tiene éxito, se hace que la plantilla, y se pasa el elemento a la plantilla. En este punto, la vista tiene la información que necesita para realizar la representación adecuada.
Ahora pruebe el JSON representado por la unidad que prueba la vista de 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...
¿No sería más fácil analizar la respuesta json? – jdeseno
Tenía la impresión de que las pruebas unitarias realmente no invocan la vista. Es el caso? En caso afirmativo, ¿qué tipo de prueba es lo que busco (ver?) –
Creo que esta pregunta ya fue discutida [aquí] (http://stackoverflow.com/questions/336716/how-to-test-json-result-from -rails-functional-tests). Lo que estás haciendo no es unidad, sino prueba funcional. Y en realidad representa la vista. –