1. ホーム
  2. ruby-on-rails

[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]

2022-02-15 17:02:33

質問内容

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

2つ目のRailsアプリケーションに移行していますが、今回は教訓から、TDDを使用して開発したいと思います。開発には時間がかかりますが、長い目で見れば、対処はずっと簡単です。

RspecとCucumberの名前は聞いたことがありますが、よくわかりません。

RSpecとCucumberの違いと用途を知りたいです。

また、初心者の立場から、テストフレームワークが本当に必要なのかどうか(唯一の開発者でもある)、教えていただけると幸いです。

どのように解決するのか?

RSpecとCucumberは、どちらもテストフレームワークです。RSpecには伝統的なUnit Testing(アプリケーションのクラスや一部を他のアプリケーションから分離してテストすること)が含まれています。つまり、モデルはモデルが行うべきことを行い、コントローラはそれが行うべきことを行う、など)。

RSpecとCucumberはどちらも受け入れテストに使用されます(人に応じてATDD、BDD、Specification by Exampleなどと呼ばれます)。これらはビジネスケース駆動の統合テストです。つまり、ユーザーがアプリケーションを使用する方法をシミュレートし、Railsスタックをフルに使用するため、アプリケーションの異なる部分が一緒に動作する方法の問題は、ユニットテストでは発見できない方法で発見することができるのです。

RSpecとCucumberの大きな違いは、ビジネスの読みやすさの要素です。Cucumberの最大の魅力は、仕様(機能)がテストコードから分離されているため、プロダクトオーナーがコードを掘り下げることなく仕様を提供したり、レビューしたりすることができる点です。これが、Cucumberで作る.featureファイルです。RSpec も同様の仕組みですが、代わりにビジネス仕様を含む Describe, Context, It ブロックでステップを記述し、その記述を実行するコードを即座に用意します。このアプローチは、開発者にとっては少し簡単ですが、技術者でない人々にとっては少し難しいです。

どちらを使うか?もしあなたが唯一の開発者であり、プロダクトオーナーであるならば、私はRSpecにこだわります。技術者にとって理解しやすく、スコープとコントロールを維持する上でいくつかの利点があり、テストステップのためのRegExに煩わされないようにすることができます。もし、あなたがクライアントのために作っていて、彼らが仕様に関してハンズオンであるなら、受け入れテストにはCucumberを使い、ユニットテストにはRSpecを使いましょう。

両者の主な違いについて説明します。

キュウリです。

#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

リスペック

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を使いこなすのに最適な内容です。