2012-08-01 9 views
91

私は6ヶ月間のRails開発経験があります。私は今認証と承認とpostgresqlのdbで使用されているWebアプリケーションを構築しました。RSpecとキュウリの違いは何ですか?

私は2番目のRailsアプリケーションに移行しましたが、今度は教訓を受けて、TDDを使用して開発したいと思います。スケールを変更してバグを修正することが非常に簡単だったからです。それは開発が遅いですが、長期的には対処がずっと簡単です。

私はRspecとCucumberについて聞いたことがありますが、徹底的に混乱しています。

私は、RSpecとCucumberの違いと、それらの用途について知りたいと思います。

テストフレームワークが本当に必要かどうかは、初心者(唯一の開発者でもあります)の観点から知ることも有益でしょう。

+4

さらにあなたを混乱させるために、Minitestもオプションになる可能性があります –

+2

、さらにはcapybara –

+5

Capybaraは実際にテストフレームワークのいずれかで使用できるドライバであり、それ自体のフレームワークではありません。Watir-webdriverとSeleniumは、同様の機能を持つ2つのものですが、実際のブラウザを駆動し、Capybaraを駆動するよりはるかに遅いです。Rack :: Test – DVG

答えて

269

RSpecとキュウリの両方がテストフレームワークです。 RSpecには従来のユニットテスト(アプリケーションのクラスまたはアプリケーションの一部をアプリケーションの他の部分とは独立してテストすることを意味する)が含まれているため、モデルはあなたのモデルがしなければならないことをやります。

RSpecとキュウリの両方が受け入れテストに使用されます(ATDD、BDD、Example by Exampleなど)。これは、ビジネスケース駆動の統合テストです。つまり、ユーザーがアプリケーションを使用する方法をシミュレートし、完全なRailsスタックを使用するため、アプリケーションのさまざまな部分が一緒に動作する方法の問題は、単体テストでは見つからない見つける。

RSpecとCucumberの主な違いは、ビジネス上の可読性です。キュウリの主な目的は、仕様(機能)がテストコードとは別のものであるため、製品の所有者がコードを掘り下げることなく仕様を提供または確認できることです。これらはキュウリであなたが作った.featureファイルです。 RSpecにも同様のメカニズムがありますが、代わりに、ビジネス仕様を含むDescribe、Context、またはItブロックでステップを記述し、そのステートメントを実行するコードをすぐに作成します。このアプローチは、開発者が少しでも簡単に作業できますが、技術者以外の方にとっては少し難しくなります。

どちらを使用しますか?あなたが唯一の開発者と製品の所有者であれば、私はRSpecに固執します。技術者にとっては理解しやすいと感じていますし、スコープを絞って管理していく上でいくつかの利点があり、テストのためのRegExsステップ。あなたがクライアントのためにこれを構築していて、仕様に関して実際に実習を行っている場合は、受入れテストのためにCucumberに行き、Unit Testsの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のと一緒に行く得ることに優れています:http://everydayrails.com/2012/03/12/testing-series-intro.html

+15

これは素晴らしい答えです。あなたの時間とアドバイスをいただきありがとうございます。読んでいるレールにはたくさんの本がありますが、これまでのところ、このような区別をして、どれがどちらであるかを説明するものは見つかりませんでした。ありがとうございました – banditKing

+1

私はこの答えを必要としない人にはあまりお勧めできませんでした。詳細をありがとう! – Ikon

+1

これは実際にstackoverflowに関する最も包括的で分かりやすい解答の1つです(素晴らしい例があります)。 – Sheharyar

関連する問題