Итак, я разобрался с несколькими вещами и теперь отвечу на свой вопрос, теперь, когда он заставил его работать.
Для простоты я буду называть название моего драгоценного камня как "my_gem"и" MyGem ":
В файле engine.rb
я добавил:
require 'my_gem'
require 'rails'
Это исправило ошибки типа:
my_gem/lib/my_gem/engine.rb:2: uninitialized constant MyGem::Rails (NameError)
В spec_helper.rb
Я добавил прямо вверху:
require 'bundler/setup'
require 'my_gem'
Это сделано для того, чтобы убедиться, что Bundler инициализируется сразу, а не через приложение.Таким образом, я могу загрузить MyGem здесь, и он будет подключен к последовательности инициализации приложения.Это исправляет NameError
исключения для классов моделей движка.
Это оставляет вопрос о том, что Gemfile
использовать.Проблема в том, что у моего приложения есть собственный гемфайл, а гем / движок нуждаются в отдельных зависимостях в своем собственном Gemfile
.
Я не смог найти API для Bundler для передачи ему двух Gemfile
,на самом деле Бандлер, похоже, строится вокруг предположения об одном авторитетном Gemfile
.Так что я генерирую один в spec_helper
.Я беру гемфайл приложения и добавляю gemspec
, который указывает на зависимость гема в формате GemSpec.(Кстати, намек на gemspec
отсутствует в книге Хосе Валима).
Я не знаю, есть ли лучший способ, чем объединение файлов во время запуска теста.Если вы знаете об этом, пожалуйста, ответьте.
Полезные ресурсы: