【问题标题】:Mongoid force readonly modeMongoid 强制只读模式
【发布时间】:2019-06-27 15:02:33
【问题描述】:

我有一个特定的用例,我需要向我的一些客户发送测试电子邮件(即让他们提前知道我们所有电子邮件的外观,并且他们可以通过内部 IT 系统检查不会出现黑名单)。

为了实现这是一种非常有效的方法,我正在重用我现有的工厂,以便我可以轻松生成发送到我的邮件程序的测试数据,并且在发送每封电子邮件之前,我会覆盖 to/cc 字段以添加测试邮件,并在主题中添加[test]作为前缀

我想编写一个测试,确保没有数据写入数据库(即我的工厂使用得很好,只使用build 语句,尤其是在处理嵌套关联构建时)

我需要编写一个规范,以确保数据库不会收到任何写入查询(或实际上根本没有任何查询),即。我的“测试代码”是安全的,不会在工厂的生产数据库中创建数据。

到目前为止,我无法找到一种方法来执行此操作,因此我添加了一些代码来迭代我的所有集合并运行它

tested_models.each do |model|
  expect(model.count).to eq(0), "#{model.name} was persisted"
end

但我需要手动更新此tested_models,因此效果不佳。我正在寻找更好的解决方案。我的提示

  • 也许找到一种方法来强制 mongoid 适配器使用只读模式,或者创建一个只读用户,所以我会看到像 Mongo::Error::OperationFailure: not authorized on myapp_test to execute command { insert: "messages", $db: 这样的消息
  • Stub 是负责处理 DB 查询的核心 Mongoid 方法之一,cf this question 和问题opened in Rspec

【问题讨论】:

    标签: rspec mongoid rspec-rails rspec3


    【解决方案1】:

    要验证应用程序没有发送更新,您可以使用驱动程序中的命令监控 (https://docs.mongodb.com/ruby-driver/master/tutorials/ruby-driver-monitoring/#command-monitoring) 并检查记录的命令。

    要禁止更新集合,您可以在 MongoDB (https://docs.mongodb.com/manual/tutorial/manage-users-and-roles/) 中设置角色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 2011-04-21
      相关资源
      最近更新 更多