web-dev-qa-db-ja.com

RSpecとCucumberの違いは何ですか?

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

2番目のアプリケーションに移りますRails=今回は、レッスンを学んだ後、TDDを使用して開発したいと思います。開発には時間がかかりますが、長期的には対処がはるかに簡単です。

RspecとCucumberについて聞いたことがありますが、完全に混乱しています。

RSpecとCucumberの違いと、それらの用途を知りたいです。

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

112
banditKing

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

この blog シリーズは、RSpecを使用するのに最適です。

317
DVG