Можно ли заглушить метод сохранения ActiveRecord? - PullRequest
0 голосов
/ 03 марта 2019

Кажется, что довольно медленная проверка рельсов происходит из-за связи с базой данных.Я начал заменять некоторые тесты, в которых я вызываю методы FactoryBot create и build на build_stubbed.Тем не менее, некоторые тесты включают тестирование обратных вызовов, а некоторые даже тестируют, как несколько обратных вызовов взаимодействуют друг с другом.

Я начал искать, чтобы узнать, создал ли кто-нибудь библиотеку, которая заглушает метод сохранения, но ничего не смог найти.Я представляю что-то, что будет вызывать все методы обратного вызова в правильном порядке, а также правильно устанавливаю все записи Active Model Dirty.Я думаю, что такие вещи, как проверка уникальности и любые запросы ActiveRecord в обратных вызовах, нужно было бы вручную заглушить, чтобы не общаться с базой данных.

Существуют ли какие-либо инструменты, которые уже имеют эту функцию?Или это не ценно, потому что в конечном итоге это не окажет большого влияния на скорость, если вы все равно выполняете все эти действия.Есть ли что-то, что я не рассматриваю в отношении сохранения метода сохранения?

1 Ответ

0 голосов
/ 05 марта 2019

Разве невозможно заглушить базу данных при тестировании приложения Rails?Нет, но это практически невозможно.

Самое близкое, что мне известно, это запуск Rails на экземпляре SQLite в памяти.

Несколько причин, почему:

  • save - это только один из многих, многих различных способов доступа к базе данных в Rails
  • ActiveRecord, благодаря своей конструкции тесно связывает ваши доменные модели с постоянством данных, что затрудняет создание только постоянных данных
  • SQL / RDBMS - великолепные абстракции для того, что они могут сделать, было бы невероятно трудно создать достойный макет, чтобы заглушить его с помощью

Я слышал о нескольких проектах, которые стремились устранить эти причины вышес большими отклонениями от обычного способа создания приложений Rails:

  • Использование альтернативных объектов для моделей предметной области вместо ActiveRecord и использование AR только в крайне контролируемом и ограниченном виде.
  • Избегайте использования ActiveRecord в целом в пользу другого ORM - такого, который позволяет отделить доменные модели от постоянства

Другими словами, это потребовало бы фундаментальных изменений в архитектуре и использовании «обычного приложения Rails», учитывая, какую большую роль обычно играет ActiveRecord.

...