我在rails中有一个导入控制器,可以将多个csv文件和多条记录导入我的数据库.我想在RSpec中测试这些记录是否通过使用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)

Ruby-on-rails相关问答推荐

Rails 7.1中的覆盖脚手架控制器

使用Hotwire/Turbo的Rails在链接悬停时获取请求

错误AESGCMOpen获取密码:消息身份验证失败:Golang解密GCM

如何在测试期间为 Rails 应用程序启用 Rails.cache 会话对象

如何不需要rails/all?

如何使用 activerecord activerecord-session_store 在 Rails 应用程序中使用 cookie 值在数据库中查找会话记录

Rails 3 应用程序的 MySQL 集群 (NDB) 与 MySQL 复制 (InnoDB):优点/缺点?

如何使用 RSpec 和 Devise/CanCan 进行集成测试?

SQLite3::BusyException

如何使用失败try 次数使设计可锁定

如何在 Windows 上为 Ruby 安装 sqlite3?

可以在 Rails/ActiveRecord 中使用 NULL 指定唯一索引吗?

Ruby on Rails - link_to 按钮 / css

ActiveRecord 查找现有表索引

在 Devise on Rails beta 3 中创建管理员用户

Rspec - Rails - 如何遵循重定向

我怎样才能看到水豚在失败的黄瓜步骤中发现了什么?

Ruby 1.9.2 和 Rails 3 无法打开 rails 控制台

在 Ruby on Rails 中设置日志(log)记录级别

如何获取 Rails 3.1 中assets资源 的绝对 URL?