[解決済み] rails rspec before all vs before each
2023-07-03 13:05:59
質問
contest_entry_spec.rb
require 'spec_helper'
describe ContestEntry do
before(:all) do
@admission=Factory(:project_admission)
@project=Factory(:project_started, :project_type => @admission.project_type)
@creative=Factory(:approved_creative, :creative_category => @admission.creative_category)
@contest_entry=Factory(:contest_entry, :design_file_name => 'bla bla bla', :owner => @creative, :project => @project)
end
context 'non-specific tests' do
subject { @contest_entry }
it { should belong_to(:owner).class_name('User') }
it { should belong_to(:project) }
it { should have_many(:entry_comments) }
it { should validate_presence_of(:owner) }
it { should validate_presence_of(:project) }
it { should validate_presence_of(:entry_no) }
it { should validate_presence_of(:title) }
end
end
これらのテストを実行すると、すべてが順調ですが、before(:all) を before(:each) に変更すると、すべてのテストが失敗します。
これはエラーです。
Failure/Error: @contest_entry=Factory(:contest_entry, :design_file_name => 'bla bla bla', :owner => @creative, :project => @project)
ActiveRecord::RecordInvalid:
Validation Failed: User is not allowed for this type of project
どのように解決するのですか?
before(:all)
は、すべての例が実行される前に、ブロックを一度だけ実行します。
before(:each)
は、ファイル中の各スペックが実行される前にブロックを一回実行します。
before(:all)
インスタンス変数を設定します
@admission, @project, @creative, @contest_entry
の前に一度だけ、すべての
it
ブロックが実行される前に一度だけ実行されます。
しかし
:before(:each)
が実行されるたびに before ブロックのインスタンス変数がリセットされます。
it
ブロックが実行されるたびに、before ブロックのインスタンス変数をリセットします。
微妙な違いですが、重要です。
をもう一度。
before(:all)
#before block is run
it { should belong_to(:owner).class_name('User') }
it { should belong_to(:project) }
it { should have_many(:entry_comments) }
it { should validate_presence_of(:owner) }
it { should validate_presence_of(:project) }
it { should validate_presence_of(:entry_no) }
it { should validate_presence_of(:title) }
before(:each)
# before block
it { should belong_to(:owner).class_name('User') }
# before block
it { should belong_to(:project) }
# before block
it { should have_many(:entry_comments) }
# before block
# before block
it { should validate_presence_of(:owner) }
# before block
it { should validate_presence_of(:project) }
# before block
it { should validate_presence_of(:entry_no) }
# before block
it { should validate_presence_of(:title) }
関連
-
[解決済み] rspec 3 - クラスメソッドをスタブ化する
-
[解決済み] Herokuの問題 : あなたが探しているページは存在しません。
-
[解決済み] Heroku: 既存のrailsアプリにseeds.rbをプッシュする方法?
-
[解決済み] レイル 4 radio_button_tag default not selected
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]
-
[解決済み] 属性とカラムの違いは何ですか?
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] RSpecのlet()はいつ使うのか?
-
[解決済み】Railsの認証トークンを理解する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Rails。Ruby on Railsの移行でデータベースカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Railsです。NameError: 初期化されていない定数
-
[解決済み] Ruby on Railsのランナー
-
[解決済み] Mac OS Xにhomebrewがインストールされているかどうかを確認する方法
-
[解決済み] 該当するルートがない [GET] "demo/hello"
-
[解決済み] Ruby on rails "No route matches" (ルートに一致するものがない)。
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Rails ExecJS::ProgramError in Pages#home?
-
[解決済み] Herokuの問題 : あなたが探しているページは存在しません。
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]