Realizando pruebas a los modelos con Rspec

Realizando pruebas a los modelos con Rspec

enmanuelm19@gmail.com2020-10-13 11:46:22 UTC

Realizando pruebas a los modelos Rspec

Los modelos en Rails son los encargados de realizar la persistencia y darle formato a los objetos, también describen comportamientos y representan la estructura de datos de el aplicativo. Para tomar ventaja de esta situación que es repetitiva existe una gema que nos facilitara probar las validaciones y las relaciones que tienen nuestros modelos, esta gema es shoulda-matcher. Nos provee de helpers que abstraen el comportamiento.

Para tener mejor referencia de estos helpers a continuación muestro un ejemplo de como personalmente organizo el spec para describir las pruebas:

Rspec.describe MyModel, type: :model do
    describe "relations" do
            it { should belong_to :other_model }
            it { should have_many :other_models }
    end

    describe "validations" do
        it { should validate_presence_of :attribute }
        it { should validate_length_of(:other_attribute).is_at_least(10) }
    end
end

Para tener mas información acerca de los matchers que nos facilita la gema puedes verlo en el siguiente enlace: Matchers

Para los comportamientos personalizados, la estrategia para realizar cualquier prueba es tener es ver que argumentos o datos necesitas como entrada a la funcionalidad y que resultado esperas que te de dicha funcionalidad, se puede observar el siguiente ejemplo:

subject(:user) { FactoryBot.create(:user) }
describe "#full_name" do
        it "should show the user full name" do
            full_name = "#{user.first_name} #{user.last_name}"
            expect(user.full_name).to eq(full_name)
        end
end

Como pueden ver en el ejemplo mostrado hacemos uso de una herramienta llamada FactoryBot, esta es una gema que funciona como una fabrica de los objetos de nuestro aplicativo, se puede ver que este crea un objeto de tipo user para poder utilizar posteriormente, se recomienda definir el objeto a probar de manera mas global, utilizar subject para definir que objeto se esta probando.

Las buenas practicas siempre hay que promoverlas, es por eso que te recomiendo ver este enlace BetterSpecs para tener visible alguna de estas.


Compartir