RSpec та огірок - це тестувальні рамки. RSpec включає традиційне тестування модулів (що означає тестування класу або частини програми ізольовано від решти програми. Отже, ваша модель робить те, що повинна робити ваша модель, контролер робить те, що має робити, тощо).
І RSpec, і огірок використовуються для тестування прийнятності (що називається ATDD, BDD, специфікація за прикладом тощо, залежно від того, кого ви запитуєте). Це інтеграційні тести, орієнтовані на бізнес-кейси, які означають, що вони імітують спосіб використання користувачем програми та повного стеку Rails, тому проблеми з тим, як різні частини вашої програми працюють разом, можуть бути виявлені таким чином, що тестування одиниць не буде знайти.
Основна відмінність RSpec від огірка - це коефіцієнт читабельності бізнесу. Основний малюнок огірка полягає в тому, що специфікація (особливості) є окремими від тестового коду, тому власники ваших продуктів можуть надати або переглянути специфікацію без необхідності копати код. Це файли .feature, які ви створюєте в огірку. RSpec має подібний механізм, але замість цього ви описуєте крок із блоком Описувати, Контекст або Він, який містить специфікацію бізнесу, а потім негайно мати код, який виконує цей оператор. Такий підхід розробникам трохи легше працювати, але трохи не важче для нетехнічних людей.
Який використовувати? Якщо ви єдиний розробник та власник продукту, тоді я б дотримувався RSpec, я вважаю, що технічній особі легше зрозуміти, пропонує кілька переваг у контролі над речами та під контролем, а також не заважати RegExs для тестування кроки. Якщо ви будуєте це для клієнта, і вони практичні щодо Технічної специфікації, перейдіть з огірком для вашого тесту на прийняття та використовуйте 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.