[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]
質問内容
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を使いこなすのに最適な内容です。
関連
-
[解決済み】修正方法:エラー:'<ファイル名>'にチェックアウトされたコミットがない fatal: コマンドプロンプトで "git add ." を入力するとファイルの追加に失敗する
-
[解決済み] Ruby/Rails の「フック」とは何ですか?
-
[解決済み] 新規ユーザー作成時に ActiveModel::ForbiddenAttributesError が発生する。
-
[解決済み] デバイスを使用する現在のユーザーメソッド
-
[解決済み] rake db:migrateを使って1ステップだけロールバックする方法
-
[解決済み] 検索 vs 発見する by vs どこに
-
[解決済み] railsでhidden fieldタグを使用する方法
-
[解決済み] Ruby:Rubyの配列にinclude.の反対はある?
-
[解決済み] モックとスタブの違いは何ですか?
-
[解決済み] rake db:migrate db:reset とdb:schema:loadの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】修正方法:エラー:'<ファイル名>'にチェックアウトされたコミットがない fatal: コマンドプロンプトで "git add ." を入力するとファイルの追加に失敗する
-
[解決済み】PG::ConnectionBad: fe_sendauth: パスワードが供給されない
-
[解決済み] Errno::EACCESS: パーミッションが拒否された @ dir_s_mkdir
-
[解決済み] Ruby on Railsでsimple_formを使うさまざまな方法|何が違うの?
-
[解決済み] rails erb フォームヘルパー options_for_select :selected
-
[解決済み] nil:NilClass の未定義メソッド `each' - しかし、なぜ?
-
[解決済み] Rspec が私のモデルクラスを認識しない。初期化されていない定数エラー
-
[解決済み] bundle install --without production は何をするのですか?
-
[解決済み] rails/rubyでgroup_byを使用する。
-
[解決済み] 未初期化の定数 "コントローラ名"