В чем разница между RSpec и Cucumber? [закрыто]

114

У меня 6 месяцев опыта разработки на Rails. Я создал используемое сейчас веб-приложение с аутентификацией и авторизацией и postgresql db.

Я перехожу к своему второму приложению Rails, но на этот раз, после извлеченных уроков, я хотел бы разработать его с использованием TDD, поскольку я заметил, что его намного проще масштабировать и исправлять ошибки. Он медленно развивается, но в конечном итоге с ним гораздо легче справиться.

Я слышал о Rspec и Cucumber, но они меня полностью смущают.

Я хотел бы знать, в чем разница между RSpec и Cucumber и для чего они используются.

Также было бы полезно узнать, действительно ли нужна среда тестирования с точки зрения новичка (который также является единственным разработчиком).

бандиткороль
источник
6
Для того, чтобы запутать вас еще больше, Minitest также может быть вариант
Лукаса Клементе
5
Capybara - это действительно драйвер, который можно использовать в любой из сред тестирования, но не сам по себе. Watir-webdriver и Selenium - две вещи, которые выполняют схожие функции, но работают в реальном браузере и работают намного медленнее, чем Capybara driving Rack :: Test
DVG
37
Как это неконструктивно ???
Джейсон Светт,
19
Отличный вопрос и отличный ответ. Это как раз то, что мне было нужно. Я озадачен закрытием вопроса как неконструктивным. Кого волнует, вызовет ли он дебаты? Вот для чего нужно голосование сообщества.
dpurrington
14
Голосование за повторное открытие, поскольку я считаю основания для закрытия вопроса надуманными. На него определенно можно ответить (и уже было!), Используя «подтвержденные фактами, ссылками или опытом», и любой вопрос StackOverflow, возможно, «скорее всего, потребует дебатов, аргументов, опросов» (что мы все знаем и видели). Насчет «опроса»? Принцип работы SO заключается в голосовании за и против вопросов и ответов. По сути, это один большой опрос. Закрывать это было глупо. Это хороший справочник по теме вопросов и ответов.
Адам Кэмерон,

Ответы:

323

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.

DVG
источник
24
Это отличный ответ. Большое спасибо за ваше время и советы. Я читал много книг о рельсах, но пока не нашел ни одной, которая бы проводила такие различия и объясняла, что есть что.
Еще
2
Я не могу порекомендовать этот ответ тем, кто в нем нуждается. Спасибо за подробности!
Ikon
3
Это действительно один из наиболее полных и простых для понимания ответов на stackoverflow (в комплекте с отличным примером!)
Шехарьяр