我有一个特定的用例,我需要向一些客户发送测试电子邮件(即,他们可以提前知道我们所有电子邮件的外观,并且他们可以与内部IT系统进行核对,以确保不会出现黑名单)。
为了实现此目的,这是一种非常有效的方法,我在重用我现有的工厂,以便可以轻松生成发送到邮件的测试数据,并在发送每封电子邮件之前,覆盖to / cc字段以添加测试电子邮件,并在主题中添加[test]
作为前缀
我想编写一个测试来确保没有数据写入数据库(即,仅使用build
语句以良好的方式使用了我的工厂,尤其是在处理嵌套关联构建时) / p>
我需要编写一个规范,以确保DB不会收到任何写查询(或实际上根本没有任何查询)。我的“测试代码”是安全的,并且不会在工厂的生产数据库中创建数据。
到目前为止,我还没有找到一种方法来执行此操作,因此,我添加了一些对所有集合进行迭代的代码,然后运行了此代码
tested_models.each do |model|
expect(model.count).to eq(0), "#{model.name} was persisted"
end
但是我需要手动更新此tested_models
,因此无法正常工作。我正在寻找更好的解决方案。我的提示
Mongo::Error::OperationFailure: not authorized on myapp_test to execute command { insert: "messages", $db:
的消息答案 0 :(得分:0)
要验证应用程序未发送任何更新,可以在驱动程序(https://docs.mongodb.com/ruby-driver/master/tutorials/ruby-driver-monitoring/#command-monitoring)中使用命令监视,并检查记录的命令。
要禁止更新集合,您可以在MongoDB(https://docs.mongodb.com/manual/tutorial/manage-users-and-roles/)中设置角色。