Какая разница между RSpec и Cucumber?

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

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

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

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

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

Ответ 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.