首页 > 解决方案 > Mongoid 强制只读模式

问题描述

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

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

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

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

到目前为止我还没有找到一种方法来做到这一点,所以我添加了一些代码来迭代我的所有集合并运行它

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

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

标签: rspecmongoidrspec-railsrspec3

解决方案


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

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


推荐阅读