RSpec и Cucumber - это среды тестирования. RSpec включает в себя традиционное модульное тестирование (что означает тестирование класса или части приложения изолированно от остальной части приложения. Итак, ваша модель выполняет то, что должна делать ваша модель, контроллер делает то, что должен делать, и т. Д.).
RSpec и Cucumber используются для приемочного тестирования (которое называется ATDD, BDD, Specification by Example и т. Д. В зависимости от того, кого вы спрашиваете). Это тесты интеграции, основанные на бизнес-кейсе, что означает, что они имитируют то, как пользователь использует приложение и использует полный стек Rails, поэтому проблемы с тем, как различные части вашего приложения работают вместе, могут быть обнаружены таким образом, что модульное тестирование не будет найти.
Основное различие между RSpec и Cucumber - это фактор удобочитаемости для бизнеса. Основная привлекательность Cucumber заключается в том, что спецификация (функции) отделены от тестового кода, поэтому владельцы ваших продуктов могут предоставить или просмотреть спецификацию без необходимости копаться в коде. Это файлы .feature, которые вы создаете в Cucumber. RSpec имеет аналогичный механизм, но вместо этого вы описываете шаг с помощью блока Describe, Context или It, который содержит бизнес-спецификацию, а затем сразу получаете код, который выполняет этот оператор. Разработчикам с этим подходом немного легче работать, но немного сложнее для нетехнических специалистов.
Что использовать? Если вы единственный разработчик и владелец продукта, то я бы придерживался RSpec, я считаю, что техническому специалисту это легче понять, предлагает несколько преимуществ в том, чтобы держать вещи в рамках и под контролем, и не дает вам возиться с RegEx для тестирования. шаги. Если вы создаете это для клиента, и они практические в отношении спецификации, используйте Cucumber для своего приемочного теста и используйте RSpec для модульных тестов.
Просто чтобы продемонстрировать основное различие между ними:
Огурец:
#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
Эта серия блогов отлично подходит для начала работы с RSpec.