es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que la prueba assert_changes espera que el sell_price de un artículo específico (articles(:fifty_five)) cambie de 9.99 a 0.01 después de realizar una solicitud post. 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:

    # Suponiendo que `@existing` es una matriz que contiene al menos un artículo
    primer_articulo = @existing[:items].first
    
    assert_changes -> { primer_articulo['sell_price'] }, from: 9.99, to: 0.01 do
      post array_api_v1_articles_path, params: @existing, as: :json
    end
    

    Aquí, estamos usando una lambda (-> { primer_articulo['sell_price'] }) para obtener dinámicamente el sell_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.

Comments are closed.