Я и моя команда интенсивно производили плагины для приложения Rails 2.3 (Redmine, в настоящее время ветвь 1.1). До сих пор мы отказались от загрязнения базового кода Redmine, написав большинство наших изменений в виде плагинов rails. Это имеет два основных преимущества:
- В большинстве случаев интеграция с более новыми версиями Redmine проста.
- Мы можем включить / отключить некоторые пользовательские поведения, удалив / удалив плагин. На самом деле, это ключевой фактор для нас, потому что у наших клиентов совершенно разные требования.
Некоторые из наших плагинов monkey-patch классов Redmine. Например, у нас есть плагин, который «внедряет» более строгие проверки в модель Issue
: start_date
, due_date
и estimated_hours
необходимы для leaf?
проблем.
Эта штука по исправлению обезьян делает несколько тестов неудачными и / или вызывает исключения. Например, этот самый плагин создает метод create_issue!
из класса IssueNestedSetTest
для создания недопустимых проблем (т. Е. Отсутствуют обязательные атрибуты, которые использует плагин):
# Helper that creates an issue with default attributes
def create_issue!(attributes={})
Issue.create!({:project_id => 1, :tracker_id => 1, :author_id => 1, :subject => 'test'}.merge(attributes))
end
Поскольку плагин может или не может быть активным, мы не хотели бы менять сам тест. Мы считаем, что лучше всего плагин обезьяна-патч теста соответственно:
module StandardTestPatches
module InstanceMethods
def create_issue_with_gespro_standards!(attributes={})
attributes.merge!(:start_date => 1.day.ago, :due_date => 1.day.from_now, :estimated_hours => 8)
create_issue_without_gespro_standards!(attributes)
end
end
def self.included(base)
base.send :include, InstanceMethods
base.class_eval do
alias_method_chain :create_issue!, :gespro_standards
end
end
end
Однако, так как файл init.rb
нашего плагина требуется перед загрузкой тестовых классов, мы не можем обезопасить там класс IssueNestedSetTest
.
Есть ли способ подключить тесты рельсов для обезьян-патчей из плагинов?
ОБНОВЛЕНИЕ: Все еще открытый вопрос. Сделать его доступным на http://www.redmine.org/boards/1/topics/23672