Tips fundamentales al usar Rspec Capybara con Rails

Tips fundamentales al usar Rspec Capybara con Rails

Para empezar un pequeno ejemplo usando una prueba para un controlador en rails.

Codigo de nuestra prueba ubicado en el archivo spec/controller/payments_controller_spec.rb

require 'spec_helper'

describe PaymentsController do

describe "#create" do

 context "when success" do

   let(:params) do
    { amount_due: 100 }
   end

   specify do
     post :create, params
     expect(response).to be_success
   end
 end

context "when fails" do

  let(:payment_errors)do
    [ "Invalid amount",
    "Unprocessable Payment",
    "Transaction Failed"
    ]
  end

  let(:params) do
    { amount_due: 400 }
  end

  specify do

    post :create, params
    expect(response.status).to eq(422)
    expect(response.body).to eq(payment_errors.to_json)
   end
  end
 end
end

Codigo de app/controllers/payments_controller.rb

class PaymentsController < AuthenticatedController

  respond_to :json

  def create
   @payment_errors = ["Invalid amount",
   "Unprocessable Payment",
   "Transaction Failed"
   ]

   if params[:amount_due].to_i <= 200
     render status: : ok, json: []
   else
     render status: :unprocessable_entity, json: @payment_errors
   end
 end
end

El : ok de be de ser :ok junto ya que lo puse asi por que aparece un emoticon al ponerlo junto como podemos observar

Lo que podemos observar en el ejemplo anterior es que por ejemplo estamos probando dos contextos en el caso de que el pago sea exitoso y en el caso de que el pago sea fallido y no pueda ser aprobado, tambien podemos observar que no ponemos el valor de params[:amount_due] en valor fijo por que si lo ponemos va a hacer que nuestra prueba solo entre a un contexto ya sea fallido o exitoso y una de nuestras pruebas fallara.

Mas adelante continuaremos con ejemplos muy sencillos para comenzar en el mundo del testing con rspec en rails.

No Comments

Post A Comment