はじめに
あるシステムの自動テストをrspecで作成していた際に、Please stub a default value first if message might be received with other args as well.
というエラーが表示され詰まった時のお話です。
問題
下記を含んだテストコード実行した際にエラーが表示されました。
allow(ENV).to receive(:[]).with('HOGE').and_return('111')
エラーについて、chatgptに聞いてみました。
ENVの[ ]メソッドがHOGE
以外の引数で呼び出されている箇所が存在することが問題のようです。
解決策
chatgptの回答のように、allow(ENV).to receive(:[]).and_call_originalを追加しました。
allow(ENV).to receive(:[]).and_call_original
allow(ENV).to receive(:[]).with('HOGE').and_return('111')
おまけ
chatgpt以外にも調べたところ、こちらにも記載されていますが、環境変数は様々な箇所で呼びされることが多いため、ENVのスタブ化は今回のような問題が発生しやすいみたいですね。
おわりに
以前rspec実装した際にもallowを使用して外部へのAPI通信をスタブ化した経験はありましたが、今回初めて見たエラーだったので詰まってしまいました。エラーに関して調査し解決できたので、スタブ化に関する理解が少しは深まった気がしました!
参考