[解決済み] RSpecのスタブメソッドは、異なる値を順番に返すことができますか?
2023-04-20 06:57:11
質問
モデルFamilyにメソッド
location
をマージする
location
の出力を統合するもので、他のオブジェクトであるMembersの出力です。(Membersはファミリーと関連していますが、ここでは重要ではありません)。
例えば、与えられた
-
member_1 は
location
== 'サンディエゴ(旅行中、5月15日帰国)' -
member_2 は
location
== 'サンディエゴ'
Family.locationは'San Diego (member_1 traveling, returns 15 May)' を返すかもしれません。詳細は重要ではありません。
Family.locationのテストを簡単にするために、私はMember.locationをスタブ化したいと思います。しかし、私は、上記の例のように、2つの異なる(指定された)値を返すことが必要です。理想的には、これらは
member
の属性に基づくものであることが理想ですが、単に異なる値を順番に返すだけでもかまいません。RSpecでこれを行う方法はあるのでしょうか?
のように、各テスト例内でMember.locationメソッドをオーバーライドすることは可能です。
it "when residence is the same" do
class Member
def location
return {:residence=>'Home', :work=>'his_work'} if self.male?
return {:residence=>'Home', :work=>'her_work'}
end
end
@family.location[:residence].should == 'Home'
end
といった具合ですが、これがグッドプラクティスかどうかは疑問です。いずれにせよ、RSpecが一連の例を実行しているとき、元のクラスを復元しないので、この種のオーバーライドは後続の例を汚染することになります。
では、スタブメソッドが呼び出しごとに異なる指定された値を返すようにする方法はあるのでしょうか。
どのように解決するのですか?
メソッドをスタブ化することで、呼び出されるたびに異なる値を返すことができます。
allow(@family).to receive(:location).and_return('first', 'second', 'other')
ですから、最初に
@family.location
を呼び出すと「first」、2回目に呼び出すと「second」、それ以降はすべて「other」を返します。
関連
-
[解決済み] Railsサーバーがポートはすでに使用されていると言う、そのプロセスを殺すにはどうすればよいですか?
-
[解決済み】bcrypt LoadError: Cannot load such file
-
[解決済み] heroku open - no app specified
-
[解決済み] rspec 3 - クラスメソッドをスタブ化する
-
[解決済み] RoRにおけるSpringサーバーの機能とは?
-
[解決済み] 構文エラー "構文エラー、予期しない入力終了、keyword_endを期待 (SyntaxError)"
-
[解決済み] Ruby on rails アプリで ES6 (ES2015) を使用するにはどうすればよいですか?
-
[解決済み] railsでcheck_boxをcheckedにする方法は?
-
[解決済み] Railsです。ActiveRecordでデフォルト値を設定するにはどうすればよいですか?
-
[解決済み] RSpec: メソッドが呼び出されたかどうかをテストするには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】取得中。「プロジェクトのクローンとマイグレート後に、「マイグレーションは保留中です。この問題を解決するには 'bin/rake db:migrate RAILS_ENV=development' を実行してください。
-
[解決済み】コレクションをDESCで並べる方法
-
[解決済み] gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み] Mac OS Xにhomebrewがインストールされているかどうかを確認する方法
-
[解決済み] ウェブパッカーがアプリケーションを見つけ出せない
-
[解決済み] どなたか、collection_selectをわかりやすく説明していただけませんか?
-
[解決済み] Rails ExecJS::ProgramError in Pages#home?
-
[解決済み] サーバーはRailsで既に稼働している
-
[解決済み] rails/rubyでgroup_byを使用する。
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]