RSpec e Cucumber são ambos frameworks de teste. RSpec inclui o Teste de Unidade tradicional (o que significa testar uma classe ou parte do aplicativo isoladamente do resto do aplicativo. Portanto, seu modelo faz o que seu modelo deve fazer, o controlador faz o que deve fazer, etc).
RSpec e Cucumber são usados para Teste de Aceitação (que é chamado ATDD, BDD, Especificação por Exemplo, etc. dependendo de quem você perguntar). Estes são testes de integração orientados para o caso de negócios, o que significa que eles simulam a maneira como um usuário usa o aplicativo e usa a pilha Rails completa, de forma que problemas com a maneira como as diferentes partes de seu aplicativo funcionam juntas podem ser encontrados de uma forma que os testes de unidade não encontrar.
A principal diferença entre RSpec e Cucumber é o fator de legibilidade do negócio. O principal atrativo do Cucumber é que a especificação (recursos) são separados do código de teste, de modo que os proprietários do produto podem fornecer ou revisar a especificação sem ter que vasculhar o código. Estes são os arquivos .feature que você cria no Cucumber. RSpec tem um mecanismo semelhante, mas em vez disso, você descreve uma etapa com um bloco Descrever, Contexto ou It que contém a especificação de negócios e, em seguida, imediatamente tem o código que executa essa instrução. Essa abordagem é um pouco mais fácil para os desenvolvedores trabalharem, mas um pouco mais difícil para pessoas não técnicas.
Qual usar? Se você for o único desenvolvedor e proprietário do produto, eu ficaria com RSpec, acho que é mais fácil para um técnico entender, oferece algumas vantagens em manter as coisas com escopo definido e sob controle e mantê-lo fora de confusão com RegExs para teste passos. Se você estiver construindo isso para um cliente, e ele for prático em relação à Especificação, vá com Cucumber para seu Teste de Aceitação e use RSpec para Testes de Unidade.
Apenas para demonstrar a principal diferença entre os dois:
Pepino:
#articles.feature
Given an article exists called "Testing Demonstration"
When I visit the list of articles
Then I should see an article called "Testing Demonstration"
#article_steps.rb
Given /^an article exists called "(.+)"$/ do |title|
FactoryGirl.create(:article, title: title)
end
When /^I visit the list of articles$/ do
visit articles_path
end
Then /^I should see an article called "(.+)"$/ do |title|
page.should have_content title
end
Rspec
describe "Articles" do
let(:article) { FactoryGirl.create(:article) }
context "Index Page" do
before { visit articles_path }
it { page.should have_content article.title }
end
end
Esta série de blog é excelente para começar a usar o RSpec.