Pregunta

¿Existe una forma estándar o de mejores prácticas de probar que una acción en Rails está devolviendo el texto correcto? Por ejemplo, tengo una acción simple que se usa para hacer una validación de AJAX que hace lo siguiente:

def get_object_id
  if params[:id].blank?
    return render(:text => -1, :layout => false)
  end

  my_object = MyObject.find_by_id(params[:id].strip)

  # If the object is valid return the object id
  if my_object and my_object.active?
    return render(:text => my_object.id, :layout => false)
  end

  # Otherwise, return -1
  return render(:text => -1, :layout => false)
end

En este momento, estoy usando el objeto @Response en mis pruebas ... es decir:

def test_get_object_id_returns_invalid_for_non_existent_id
  # Act
  get :get_object_id, :id => 999

  # Assert
  assert_response :success
  assert_equal "-1", @response.body
end

Pero, aunque en su mayoría nuevos en Rails, lo que he visto hasta ahora parece sugerir que probablemente haya una mejor manera de hacer esto más que verificar @request.body.

Entonces, mi pregunta para ustedes, expertos en Ruby, es: ¿es esta la mejor manera?

¿Fue útil?

Solución

Creo que tu lugar ya está.

assert_select Solo realmente funciona para el contenido XML, por lo que para otros formatos tienes que rodar el tuyo. Probablemente agregaría un método de afirmación con nombre a ActionController::TestCase Si estuviera haciendo mucho de esto.

p.ej

def assert_response_equals(v)
  assert_equal v.to_s, @response.body, "Expected response body to be #{v.inspect}"
end

Esto le permitiría omitir las citas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top