RSpec und Cucumber sind beide Test-Frameworks. RSpec umfasst herkömmliche Unit-Tests (dh das Testen einer Klasse oder eines Teils der Anwendung isoliert vom Rest der Anwendung. Ihr Modell macht also das, was Ihr Modell tun soll, der Controller macht das, was es tun soll usw.).
RSpec und Cucumber werden beide für Abnahmetests verwendet (dies wird als ATDD, BDD, Spezifikation anhand eines Beispiels usw. bezeichnet, je nachdem, wen Sie fragen). Hierbei handelt es sich um Business-Case-gesteuerte Integrationstests. Dies bedeutet, dass sie die Art und Weise simulieren, wie ein Benutzer die Anwendung verwendet und den gesamten Rails-Stapel verwendet, sodass Probleme mit der Art und Weise, wie die verschiedenen Teile Ihrer Anwendung zusammenarbeiten, auf eine Weise gefunden werden können, die beim Testen von Einheiten nicht der Fall ist finden.
Der Hauptunterschied zwischen RSpec und Cucumber ist der Geschäftslesbarkeitsfaktor. Die Hauptattraktion von Cucumber besteht darin, dass die Spezifikation (Merkmale) vom Testcode getrennt sind, sodass Ihre Produktbesitzer die Spezifikation bereitstellen oder überprüfen können, ohne den Code durchforsten zu müssen. Dies sind die .feature-Dateien, die Sie in Cucumber erstellen. RSpec verfügt über einen ähnlichen Mechanismus. Stattdessen beschreiben Sie einen Schritt mit einem Describe-, Context- oder It-Block, der die Geschäftsspezifikation enthält, und verfügen dann sofort über den Code, der diese Anweisung ausführt. Dieser Ansatz ist für Entwickler etwas einfacher zu bearbeiten, für nicht-technische Leute jedoch etwas schwieriger.
Welche verwenden? Wenn Sie der einzige Entwickler und Produktbesitzer sind, würde ich mich an RSpec halten. Ich bin der Meinung, dass es für einen Techniker einfacher ist, dies zu verstehen, bietet einige Vorteile, wenn es darum geht, den Umfang und die Kontrolle zu behalten, und verhindert, dass Sie sich mit RegExs für Tests herumschlagen Schritte. Wenn Sie dies für einen Kunden erstellen und dieser in Bezug auf die Spezifikation praktisch ist, wählen Sie Cucumber für Ihren Abnahmetest und verwenden Sie RSpec für Unit-Tests.
Nur um den Hauptunterschied zwischen den beiden zu demonstrieren:
Gurke:
#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
Diese Blog- Serie eignet sich hervorragend für den Einstieg in RSpec.