Монгоидная сила только для чтения - PullRequest
0 голосов
/ 27 июня 2019

У меня есть особый вариант использования, когда мне нужно отправить тестовые электронные письма некоторым из моих клиентов (то есть, чтобы они заранее знали, как выглядят все наши электронные письма, и они могут проверить в своих внутренних ИТ-системах, что черные списки не появятся) ).

Чтобы добиться этого, это очень эффективный способ, я повторно использую свои существующие фабрики, чтобы я мог легко генерировать тестовые данные, которые я отправляю своим почтовикам, и перед каждой электронной почтой я перезаписываю поля to / cc, чтобы добавить тестовые письма и добавьте [test] в теме в качестве префикса

Я хотел бы написать тест, который гарантирует, что никакие данные никогда не будут записаны в базу данных (т.е. мои фабрики используются должным образом, используя только операторы build, особенно при работе со сборкой вложенных ассоциаций)

Мне нужно написать спецификацию, которая гарантирует, что БД не получает ни одного запроса на запись (или вообще никакого запроса), т.е. что мой «тестовый код» безопасен и не будет создавать данные в моей производственной базе данных с фабриками.

До сих пор я не смог найти способ сделать это, поэтому вместо этого я добавил некоторый код, который повторяется во всех моих коллекциях, и я запускаю этот

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

но мне нужно обновить tested_models вручную, так что это не работает хорошо. Я ищу лучшее решение. Мои подсказки

  • Может быть, найти способ заставить mongoid адаптер использовать режим READ-ONLY или создать пользователя только для чтения, чтобы я мог видеть сообщения типа Mongo::Error::OperationFailure: not authorized on myapp_test to execute command { insert: "messages", $db:
  • Заглушить один из основных методов Mongoid, отвечающий за обработку запросов к БД, cf этот вопрос и выпуск , открытый в Rspec

1 Ответ

0 голосов
/ 28 июня 2019

Чтобы убедиться, что приложение не отправляет обновления, вы можете использовать мониторинг команд в драйвере (https://docs.mongodb.com/ruby-driver/master/tutorials/ruby-driver-monitoring/#command-monitoring) и проверять зарегистрированные команды.

Чтобы запретить обновления для коллекций, вы можете настроитьроли в MongoDB (https://docs.mongodb.com/manual/tutorial/manage-users-and-roles/).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...