RSpecとCucumberはどちらもテストフレームワークです。RSpecには、従来の単体テストが含まれています(つまり、アプリケーションのクラスまたは一部をアプリケーションの残りの部分から分離してテストします。したがって、モデルはモデルが実行するはずのことを実行し、コントローラーは実行するはずのことを実行します)。
RSpecとCucumberはどちらも受け入れテストに使用されます(ATDD、BDD、例による仕様などと呼ばれます)。これらはビジネスケース主導の統合テストです。つまり、ユーザーがアプリケーションを使用し、完全なRailsスタックを使用する方法をシミュレートするため、アプリケーションのさまざまな部分が連携する方法の問題を、単体テストでは検出できない方法で見つけることができます。探す。
RSpecとCucumberの主な違いは、ビジネスの読みやすさの要素です。Cucumberの主な魅力は、仕様(機能)がテストコードとは別のものであるため、製品の所有者はコードを掘り下げることなく仕様を提供または確認できることです。これらは、Cucumberで作成する.featureファイルです。RSpecにも同様のメカニズムがありますが、代わりに、ビジネス仕様を含むDescribe、Context、またはItブロックを使用してステップを記述し、そのステートメントを実行するコードをすぐに取得します。このアプローチは、開発者にとっては少し簡単ですが、技術者以外の人にとっては少し難しいです。
どちらを使用しますか?あなたが唯一の開発者であり製品所有者である場合、私はRSpecに固執します。技術者にとって理解しやすく、スコープを設定して制御する上でいくつかの利点があり、テストのためにRegExsをいじらないようにすることができます。ステップ。クライアント向けにこれを構築していて、仕様に関して実践的なものである場合は、Cucumberを使用して受け入れテストを行い、RSpecを単体テストに使用します。
2つの主な違いを示すためだけに:
きゅうり:
#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を使い始めるのに最適です。