Ответ 1
RSpec и Cucumber являются обеими средами тестирования. RSpec включает в себя традиционное модульное тестирование (что означает тестирование класса или части приложения изолированно от остальной части приложения. Таким образом, ваша модель выполняет то, что должна делать ваша модель, контроллер выполняет то, что должен делать, и т.д.).
RSpec и Cucumber используются для приемочного тестирования (которое называется ATDD, BDD, спецификация по примеру и т.д. В зависимости от того, кого вы спрашиваете). Это основанные на экономическом обосновании интеграционные тесты, которые означают, что они имитируют способ, которым пользователь использует приложение и использует полный стек 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.