RSpec: context がないと letが初期化(新規作成)されないので注意
このテストは通るのに
code: .rb
email_notification_setting_fields.each do |key, value|
context "#{value}の場合" do # 初期化される
let(:email_notification_setting_field) { value } # 1回目の定義
example 'メール通知をオンにできること' do
expect(success_resultkey).to be(true) # minne_pointの結果はどうですか? end
end
end
contextを抜くと落ちる
code: .rb
email_notification_setting_fields.each do |key, value|
let(:email_notification_setting_field) { value } # 1回目の定義
example 'メール通知をオンにできること' do
expect(success_resultkey).to be(true) # minne_pointの結果はどうですか? end
end
理由
letは contextごとに初期化→作成される
なので、 contextがないということは、この let(:email_notification_setting_field) { value } は 1回目しか定義されない。
しかし繰り返し処理になってるので、 expect(success_result[key]).to be(true) のkeyには新しい値がどんどんわたされてく
なので、letで定義した変数は1回目のものにずっとなってるのに、 expect~ は それぞれの繰り返しでの値が入ってくるのでテストが落ちる