RSpecとCucumberの違いは何ですか?[閉まっている]


114

6か月のRails開発経験があります。私は、認証と承認、およびpostgresql dbで現在使用されているWebアプリケーションを構築しました。

2つ目のRailsアプリケーションに移りますが、今回は、教訓を学んだ後、TDDを使用して開発したいと思います。スケーリングとバグ修正がはるかに簡単だと気付いたからです。開発は遅いですが、長い目で見れば処理がはるかに簡単です。

私はRspecとCucumberについて聞いたことがありますが、それらによって完全に混乱しています。

RSpecとCucumberの違いと、それらの用途について教えてください。

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


6
さらに混乱させるには、Minitestもオプションになります
lucas clemente

5
カピバラは実際には、フレームワーク自体ではなく、任意のテストフレームワークで使用できるドライバーです。ワチール-webdriverをとセレンは同様の機能を行う二つのことですが、実際のブラウザを駆動し、はるかに遅いカピバラはラックを駆動するよりも::テスト
DVG

37
これはどのように建設的ではないのですか?
Jason Swett、2015

19
素晴らしい質問と素晴らしい答え。それは私が必要としていたものです。非建設的であるという質問の終了に困惑しています。それが議論を懇願するつもりであるかどうか誰が気にしますか?それがコミュニティ投票の目的です。
dpurrington 2015

14
質問を締めくくる根拠ははっきりしていません。「事実、参考文献、専門知識によってサポートされている」と StackOverflowの質問が「議論、議論、投票を募る可能性が高い」(私たち全員が知っており、すでに知っている)ことで、間違いなく答えられます。「投票」は?SOのwho modus operandiは、質問と回答の賛成票と反対票についてです。それは基本的に一つの大きな世論調査です。これを閉じるのはダフでした。トピックの質問と回答に関して、非常に役立ちます。
Adam Cameron

回答:


323

RSpecとCucumberはどちらもテストフレームワークです。RSpecには、従来の単体テストが含まれます(つまり、アプリケーションのクラスまたは一部をアプリケーションの他の部分から分離してテストします。したがって、モデルはモデルが実行するはずのことを実行し、コントローラーは実行することを実行します)。

RSpecとCucumberの両方が受け入れテストに使用されます(これは、ATDD、BDD、仕様による仕様などと呼ばれます)。これらはビジネスケース主導の統合テストです。つまり、ユーザーがアプリケーションを使用する方法と完全なRailsスタックを使用する方法をシミュレートするため、アプリケーションのさまざまな部分が連携する方法に関する問題を、ユニットテストでは検出できません。見つける。

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

どちらを使用しますか?あなたが唯一の開発者であり製品の所有者である場合、私はRSpecにこだわります。技術者にとっては理解しやすいと思います。対象範囲を限定して管理する上でいくつかの利点を提供し、テストのためにRegExをいじらないようにしますステップ。これをクライアント用に構築していて、それらが仕様に関して実践的である場合、受け入れテストには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

Rスペック

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を使い始めるのに優れています。


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

2
私はこの答えを必要としている人にあまりお勧めできませんでした。詳細ありがとうございます!
イコン

3
これは確かに、stackoverflowで最も包括的で理解しやすい回答の1つです(優れた例を挙げてください)
シェハリヤー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.