はじめに
paramとして渡された引数を使うメソッドのテストをするときに、データの作成方法で悩んだので備忘として残します。
save_hoge
メソッドの中でprivateメソッド、save_user_hoge!
が呼び出されます。
hoge
は、メソッド内でparamとして使用されるため、形を整える必要がありました。
メソッドのコード(省略してます)
app/models/user.rb
def save_hoge
save_user_hoge!(hoge)
end
private
def save_user_hoge!(hoge)
if hoge[:first_hoge_id].present?
user_hoge.create(
hoge_id: hoge[:first_hoge_id].to_i
)
end
if hoge[:second_hoge_id].present?
user_hoge.create(
hoge_id: hoge[:second_hoge_id].to_i
)
end
end
OK
spec/models/user_spec.rb
let!(:hoge) do
{
hoge: {
first_hoge_id: 1,
second_hoge_id: 2
}
}
end
spec/models/user_spec.rb
let!(:hoge) {
{
hoge: {
first_hoge_id: 1,
second_hoge_id: 2
}
}
}
NG
let!(:hoge) { hoge: { first_hoge_id: 1, second_hoge_id: 2 } }
まとめ
do
end
で囲む場合も、{}
で囲む場合も同じだと指摘をいただきました。
NG例がだめな原因は、ハッシュをくくる{}
が足りなかったからみたいです。