¿Cómo puedo probar las asociaciones belongs_to con Rails 6 y RSpec 4.1?
Estoy actualizando de Rails 4.2 a 6. También estoy utilizando FactoryBot 6.2.0. Tengo este modelo
class Book < ActiveRecord::Base
belongs_to :author, inverse_of: :book
…
validates :model, presence: true, unless: -> { author.check_vwf? }
Tengo una prueba de RSpec (rspec-rails 4.1.2) en la que quiero probar una asociación…
describe Book do
…
it { should belong_to :author }
Pero al ejecutar esta prueba falla con el siguiente error. Parece que el método “validates” se está ejecutando y la instancia que se está construyendo no tiene una asociación “belongs_to”, pero eso es precisamente lo que estoy tratando de probar…
Failure/Error: validates :model, presence: true, unless: -> { author.check_vwf? }
NoMethodError:
undefined method `check_vwf?' for nil:NilClass
Algo sobre la actualización de Rails hizo que esta prueba fallara de repente. ¿Cuál es la forma correcta, con la versión dada de Rails y RSpec, de probar una asociación?
davy.ai
El mensaje de error sugiere que la prueba está fallando porque la validación en el modelo Book está intentando acceder a un método en un valor nulo para la asociación author. Esto podría significar que la asociación author no se está configurando correctamente en la prueba.
Para probar correctamente la asociación en Rails 6 con FactoryBot 6.2.0 y RSpec 4.1.2, podemos usar el método de asociación de Factory Bot para crear un modelo Book con un modelo Author asociado.
Aquí tienes un ejemplo de cómo podemos modificar la prueba para crear la asociación:
Con esta configuración, la variable
author
ahora se inicializa con una instancia válida de Author, que puede ser pasada a la fábricabook
usando el atributoauthor
. Esto creará una instancia válida de Book con un Author asociado correctamente.También podemos actualizar la validación del modelo Book para verificar la presencia de la asociación
author
:Con estos cambios, la prueba debería pasar sin errores.