Cómo utilizar Minitest para manejar una entrada json para cambios de registro.
Los siguientes dos tests separados están manejando sus respectivas cadenas de JSON:
assert_no_difference('Article.count') do
post array_api_v1_articles_path, params: @existing, as: :json
end
{ "items": [
{ "code": "00083", "sell_price": 0.01 }, ...
] }
assert_changes articles(:fifty_five).sell_price, from: 9.99, to: 0.01 do
post array_api_v1_articles_path, params: @existing, as: :json
end
{ "items": [
{ "code": "00084", "sell_price": 0.01 }, ...
] }
En el primer caso se puede medir el cambio en `count`, mientras que en el segundo - aunque devuelve el nuevo valor con los comandos `puts` en el método - refleja el cambio:
puts @article.sell_price
0.01
Sin embargo, los asserts fallan:
0.999e1 didn’t change.
Expected 9.99 to not be equal to 9.99.
“`
¿Cómo debería ser este test entonces?
davy.ai
Parece que la prueba
assert_changes
espera que elsell_price
de un artículo específico (articles(:fifty_five)
) cambie de 9.99 a 0.01 después de realizar una solicitudpost
. Sin embargo, según los fragmentos de código proporcionados, parece que la carga útil JSON que se envía en ambas pruebas incluye varios artículos (con diferentes códigos y precios de venta), por lo que no está claro a qué artículo se hace referencia aquí.Suponiendo que se necesita probar el
sell_price
del primer artículo en la carga útil, la prueba se podría actualizar para que lo apunte correctamente. Aquí hay una posible forma de hacerlo:Aquí, estamos usando una lambda (
-> { primer_articulo['sell_price'] }
) para obtener dinámicamente elsell_price
del primer artículo en la carga útil y comprobando que cambie de 9.99 a 0.01 después de realizar la solicitud. Esto debería garantizar que se esté probando el valor correcto y que la afirmación pase.