1. ホーム
  2. ruby-on-rails

RSpecで "any_instance" "should_receive "を何度でも言う方法

2023-10-16 05:31:43

質問

railsでインポートコントローラを作成し、複数のレコードを含む複数のcsvファイルをデータベースにインポートしています。RSpecを使って実際にレコードが保存されるかどうかテストしてみたいと思います。

<Model>.any_instance.should_receive(:save).at_least(:once)

というエラーが出ます。

The message 'save' was received by <model instance> but has already been received by <another model instance>

コントローラーの工夫された例です。

rows = CSV.parse(uploaded_file.tempfile, col_sep: "|")

  ActiveRecord::Base.transaction do
    rows.each do |row| 
    mutation = Mutation.new
    row.each_with_index do |value, index| 
      Mutation.send("#{attribute_order[index]}=", value)
    end
  mutation.save          
end

RSpecを使ってテストすることは可能でしょうか、それとも何か回避策があるのでしょうか?

どのように解決するのですか?

新しい構文があります。

expect_any_instance_of(Model).to receive(:save).at_least(:once)