
Olá RSpec
O RSpec é um framework de testes escrito em Ruby que segue BDD(Behavior Driven Development),nos códigos a seguir vou mostrar o RSpec no Rails.
Instalando
Para usar o RSpec basta instalar a gem:
gem install rspec
ou em seu projeto rails adicione as seguintes linhas:
group :development, :test do
gem 'rspec-rails'
end
Após instalado a gem basta executar o seguinte comando no terminal:
rspec --init
Após a executar o comando serão adicionados ao projeto a pasta spec e o arquivo spec_helper.rb neste arquivo podemos realizar algumas configurações do rspec, vamos falar mais sobre em um outro post.
Além dos arquivos citados anteriormente ganhamos alguns novos generators: models,job,feature etc, veja aqui.
Usando o RSpec
Então temos nosso model Item com uma validação:
class Item < ApplicationRecord
validates :name, :quantity, presence: true
end
E nosso teste onde queremos fazer dois testes:
- Verificar se o campo name está preenchido.
- Mostrar uma mensagem caso não esteja.
- Estamos usando a gem FactoryBot.
require 'rails_helper'
RSpec.describe Item, type: :model do
let(:item){FactoryBot.create :item}
it "Create a Item with all fields fill" do
expect(item.valid?).to be_truthy
end
it "Create a Item without a name" do
item.name = ""
expect(item.valid?).to be_falsey
end
end
Então vamos por partes e mostrar o que significa cada comando em nosso teste:
- RSpec.describe Item, type: :model do: Nesta linha estamos mostrando para o RSpec qual classe queremos testar e qual é tipo desta classe podem ser model,controller etc.
- Context: O contexto do nosso teste separando assim nossos testes por funcionalidade.
- It: É usado para descrever o cenário que estamos testando.
- Expect: Resultado esperado do teste, pode ser tanto um resultado positivo quando negativo.
Executando Testes
Para executar os testes basta executar o seguinte comando:
rake spec
Como nossos teste são bem simples todos vão passar sem problemas então o resultado é :
...................
Finished in 1.5 seconds (files took 5.56 seconds to load)
2 examples, 0 failures
Por enquanto é só isso, nos vemos na próxima.