Есть ли способ, чтобы подключить рельсы-тесты от плагинов? - PullRequest
0 голосов
/ 21 апреля 2011

Я и моя команда интенсивно производили плагины для приложения 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

1 Ответ

1 голос
/ 05 мая 2011

Всякий раз, когда я пишу плагины Redmine или ChiliProject, я всегда предполагаю, что:

  • тесты плагинов будут выполняться самостоятельно (внутри директории плагина)
  • плагин может изменитьсякода ядра достаточно для того, чтобы тесты ядра не прошли

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

Что я рекомендую (и делаю):

  1. Удалите все неосновные плагины
  2. Убедитесь, что тесты ядра проходят
  3. Установите PluginA
  4. cd в каталог PluginA
  5. Запустите тесты PluginA изолированно

(И позже вы можете столкнуться с проблемами, если оба PluginA и PluginB установлены)

Извините, лучшего решения нет.

...