¿Cómo puedo hacer valer mi solicitud Ajax y probar la salida JSON de las pruebas funcionales de Ruby on Rails?¿Cómo se prueba el resultado JSON de las pruebas funcionales de Ruby on Rails?
Respuesta
Utilice el JSON.parse de la gema JSON, que toma una cadena como entrada y devuelve un hash Ruby que representa el JSON.
Aquí está la esencia básica para una prueba:
user = JSON.parse(@response.body)
assert_equal "Mike", user['name']
Aquí hay documentación de la gema: http://json.rubyforge.org/. Además, puedes jugar con la gema JSON en IRB con bastante facilidad.
También para respuestas cortas de JSON, simplemente puede hacer coincidir una cadena de JSON con @ response.body. Esto evita tener que depender de otra gema más.
assert_equal '{"total_votes":1}', @response.body
Carriles tiene soporte JSON construido en:
def json_response
ActiveSupport::JSON.decode @response.body
end
No hay necesidad de un plugin
A continuación, puede hacer algo como esto:
assert_equal "Mike", json_response['name']
Para obtener un rendimiento, es probable que quieren algo como: @json_response || = ActiveSupport :: JSON.decode @ response.body –
Alex: ¿No sería eso caché la respuesta de la primera probar y devolver eso en todas las siguientes pruebas JSON? – iGEL
Esto almacenará en caché la respuesta para todas las solicitudes dentro de una función de prueba, lo que puede no ser un efecto deseable. Para aclarar, no almacenaría en caché las pruebas ACROSS. – WattsInABox
Si está utilizando RSpec , json_spec es digno de un vistazo
En realidad, se puede utilizar de forma implícita el módulo JSON:
assert_equal assigns(:user).to_json, @response.body
Puede utilizar el AssertJson gem para un buen DSL que le permite comprobar si hay claves y valores que deben existir en su JSON respuesta.
Añadir la gema a su Gemfile
:
group :test do
gem 'assert_json'
end
Este es un ejemplo rápido de cómo su prueba de funcionamiento/controlador podría parecerse a (el ejemplo es una adaptación de su README):
class ExampleControllerTest < ActionController::TestCase
include AssertJson
def test_my_action
get :my_action, :format => 'json'
# => @response.body= '{"key":[{"inner_key":"value1"}]}'
assert_json(@response.body) do
has 'key' do
has 'inner_key', 'value1'
end
has_not 'key_not_included'
end
end
end
Solo tiene que incluir el módulo AssertJson
en su prueba y usar el bloque assert_json
donde puede verificar la respuesta a las claves y valores existentes y no existentes. Sugerencia: no es inmediatamente visible en el README, pero para comprobar si un valor (por ejemplo, si su acción sólo devuelve una matriz de cadenas) que puede hacer
def test_my_action
get :my_action, :format => 'json'
# => @response.body= '["value1", "value2"]'
assert_json(@response.body) do
has 'value1'
has 'value2'
has_not 'value3'
end
end
Como se ha señalado, se utiliza para probar la JSON.parse JSON , pero donde lleva a cabo esa afirmación depende de cómo está renderizando el JSON.
Si está generando el JSON en el controlador, analiza el JSON en las pruebas funcionales del controlador (como se muestran las otras respuestas). Si está procesando JSON, con una vista usando Jbuilder, rabl u otra gema que adopta este enfoque, entonces parse the JSON in the view unit tests no las pruebas funcionales del controlador. Las pruebas unitarias generalmente son más rápidas de ejecutar y más fáciles de escribir, por ej., puede construir modelos en memoria en lugar de crearlos en la base de datos.
Ninguna de las respuestas proporciona una buena forma de mantenimiento para verificar una respuesta JSON. Me parece que éste sea el mejor:
https://github.com/ruby-json-schema/json-schema
Proporciona una buena aplicación de la norma json schema
Puede escribir un esquema como:
schema = {
"type"=>"object",
"required" => ["a"],
"properties" => {
"a" => {
"type" => "integer",
"default" => 42
},
"b" => {
"type" => "object",
"properties" => {
"x" => {
"type" => "integer"
}
}
}
}
}
y usarlo como: JSON::Validator.validate(schema, { "a" => 5 })
La mejor manera de verificarlo contra mi implementación de cliente de Android.
- 1. Rails - Prueba API JSON con pruebas funcionales
- 2. Pruebas funcionales de un POST RESTful en Ruby on Rails
- 3. ¿Cómo hago las pruebas de concurrencia de Ruby on Rails?
- 4. Ruby on rails diferencia entre integración y prueba funcional
- 5. Ruby on Rails - Render JSON
- 6. Cómo caché JSON en ruby on rails?
- 7. Pruebas funcionales de Ruby on Rails con el complemento RESTful Authentication
- 8. ¿Cómo desactivo los manejadores de rescate en las aplicaciones de Ruby on Rails cuando estoy ejecutando pruebas funcionales?
- 9. Ruby on Rails: Running Tests
- 10. Proyecto Ruby On Rails sin pruebas
- 11. Ruby on Rails Serialización avanzada de JSON
- 12. Prueba de integración de JavaScript en Ruby on Rails
- 13. ¿Hay alguna prueba para Ruby on Rails?
- 14. Haciendo pruebas funcionales en Rails con Devise
- 15. Prueba de integración continua para Ruby on Rails con Jenkins
- 16. Prueba automatizada con Ruby on Rails: mejores prácticas
- 17. resultado JSON en Rails
- 18. Haskell Pruebas funcionales contra una API JSON
- 19. Prueba funcional de Ruby on Rails con autenticación Devise
- 20. Ruby on Rails: ¿Cómo instalo json en Windows 7?
- 21. Cómo dominar Ruby on Rails
- 22. Desarrollo de Ruby on Rails en Windows
- 23. Borrado de la base de datos de prueba entre la unidad y las pruebas funcionales en Rails (factory_girl)
- 24. ¿Cómo funciona Ruby on Rails?
- 25. Ruby on Rails, json vs js ajax response
- 26. Las sesiones se están cruzando. Ruby on Rails
- 27. Opciones para la prueba de pila completa en Ruby on Rails
- 28. Ruby on Rails will_paginate
- 29. Evite que Ruby on Rails 3 analice la publicación JSON
- 30. Usos de Ruby on Rails
agradable y fácil - gracias :) –