У меня есть кодовая база, которая тестируется в двух сценариях: запуск через точку входа A и B. Когда он выполняется через A, соединение db используется как есть.Когда он запускается через B, ActiveRecord::Base.connection
исправляется обезьяной.
Поскольку B - просто вспомогательный скрипт, в настоящее время он тестируется в rspec, выполняя его как внешнюю команду и проверяя вывод.Я хотел бы вернуть здравомыслие и протестировать поведение, не вызывая при этом новых процессов.
Есть ли способ в mocks rspec "временно расширить" класс?Я хотел бы получить поведение выполнения:
before do
ActiveRecord::Base.connection.extend(App::SomePatch)
end
after do
ActiveRecord::Base.connection.unextend(App::SomePatch)
end
Конечно, несуществующего не существует.У меня есть только 3 метода для исправления, поэтому я мог бы вместо этого использовать макеты для каждого метода, но псевдоним метода усложняет задачу.
Модуль исправления выглядит следующим образом:
module SomePatch
def SomePatch.included(mod)
alias :old_execute :execute
end
def execute(*args) ... end
def some_storage
@some_storage ||= []
end
end