Почему test:units и test:functionals настаивают на том, чтобы работать в среде разработки?

Типичное решение этой проблемы - позволить прокси-серверу обрабатывать любое необходимое переписывание. Например, в Apache вы можете использовать rewrite_module и / или headers_module для исправления заголовков. В качестве другого примера, Nginx автоматически обрабатывает этот и другие подобные случаи после настройки вышестоящих серверов.

В ответ на комментарии:

Каковы значения конфигурации весенней загрузки remote_ip_header и protocol_header?

Давайте на минутку забудем Spring Boot. Tomcat, встроенный контейнер сервлетов, имеет клапан, известный как RemoteIpValve. Этот клапан является портом Apache remotip_module . Основной целью этого клапана является обработка «useragent, который инициировал запрос, как инициирующего useragent» для «целей авторизации и регистрации». Для использования этого клапана его необходимо настроить.

Более подробную информацию об этом клапане можно найти здесь здесь .

Spring Boot удобно настраивает этот клапан через application.properties через свойства server.tomcat.remote_ip_header и server.tomcat.protocol_header.

11
задан John Topley 13 June 2009 в 17:05
поделиться

5 ответов

В верхней части файла test_helper.rb у меня есть код

ENV["RAILS_ENV"] = "test"

Если у вас нет этой строки, то системная проблема будет работать в среде по умолчанию (т. Е. При разработке).

0
ответ дан 3 December 2019 в 11:21
поделиться

Искать RAILS_ENV и его варианты по всему проекту. Посмотрите, установили ли вы его где-нибудь в своем приложении или в своих тестах.

Кроме того, на какой платформе вы работаете? Можете ли вы запустить тесты на другой машине и посмотреть, совпадают ли результаты?

Если это относительно недавняя разработка и вы используете RCS, например Git или SVN, вам следует просмотреть последние коммиты, и если вы Если вы специально используете Git, вам следует изучить git bisect. Если вы не используете RCS, вам следует его использовать.

Если это действительно новая проблема приложения, то, вероятно, проблема в вашей среде.

Какие плагины и гемы вы установили / настроили? Можем ли мы увидеть след?

0
ответ дан 3 December 2019 в 11:21
поделиться

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

Если вы удалите строку, которая вызывает исключение, вы можете обнаружить, что все тесты выполняются успешно.

] Если вы попробуете следующее, вы можете обнаружить, что это объясняет проблему.

  1. Установите среду для разработки (только для целей трассировки)

    export RAILS_ENV = development

  2. Удалите все строки, которые искусственно вызывать исключения в вашей среде файлов.
  3. Добавьте следующую строку в конец каждый файл в конфигурации / средах

     помещает «**** В конфигурации среды # {ENV ['RAILS_ENV']} ****»
    
  4. Добавьте следующую строку в test / test_helper.rb сразу под строкой, которая устанавливает среду для тестирования.

     добавляет «**** Помощник по загрузке теста **** Environment = # {ENV ['RAILS_ENV' ]} "
    
  5. Запустить rake с помощью опции трассировки, чтобы наблюдать за выполнением задач с отслеживанием текущей активной среды.

     rake -t test
    
  6. Изучите выходные данные, чтобы определить, где ваша среда настроена неправильно.
  7. Запустите тесты снова, но на этот раз установите среду непосредственно перед запуском тестов, используя

    export RAILS_ENV = test

Если у вас действительно есть проблема, тогда, возможно, вам следует опубликовать вывод rake -t с кодом трассировки в.

Это результат моих тестов в совершенно новом проекте с минимальным тестированием. Вы заметите, что перед запуском реальных тестов среда всегда является "тестовой"

** Invoke test (first_time)
** Execute test
** Invoke test:units (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
**** In development environment config ****
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment
** Execute db:test:purge
** Execute db:test:load
** Invoke db:schema:load (first_time)
** Invoke environment
** Execute db:schema:load
** Execute test:units
**** Loading test helper **** Environment = test
**** In test environment config ****
Loaded suite /Library/Ruby/Gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader
Started
.
Finished in 0.071771 seconds.

1 tests, 1 assertions, 0 failures, 0 errors
** Invoke test:functionals (first_time)
** Invoke db:test:prepare
** Execute test:functionals
**** Loading test helper **** Environment = test
**** In test environment config ****
Loaded suite /Library/Ruby/Gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader
Started
.....
Finished in 0.133776 seconds.

5 tests, 6 assertions, 0 failures, 0 errors
** Invoke test:integration (first_time)
** Invoke db:test:prepare
** Execute test:integration
-1
ответ дан 3 December 2019 в 11:21
поделиться

Самым вредным из того, что я видел, является то, что им не нужно понимать, что они делают (т. Е. Допустимо вставить какой-то код, который вы не понимаете, потому что он «кажется» работающим ).

Меня также действительно поражает количество людей, которые, кажется, не понимают разницы между И и ИЛИ.

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

И с точки зрения базы данных, только потому, что запрос выполняется, не означает, что результаты соответствуют желанию пользователя.

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

5
ответ дан 3 December 2019 в 11:21
поделиться

Я почти всегда хочу заставить свои тесты запускать себя и их предварительные условия в «тестовой» среде, особенно когда ENV ['RAILS_ENV'] установлен на любое из общих значений по умолчанию (чтобы избежать катастрофических аварий), но я также хотите иметь возможность запускать тесты, скажем, в среде с именем "v_2_0_maint_test" или что-то в этом роде, вызывая rake test: units RAILS_ENV = v_2_0_maint_test в командной строке.

Итак, у меня есть файл test_tasks.rake, который добавляет предварительное условие для каждой интересующей меня тестовой задачи. Поскольку это предварительное условие является предварительным, любые другие предварительные условия (например, db: test: prepare, db: fixtures: load ) работать в той же среде. Он утверждает, что может влиять только на те тесты, на которые вы хотите повлиять, и их предварительные требования.

namespace :test do |n|
  [ n[:units], n[:functionals], n[:integration] ].each do |t|
    t.prerequisites.unshift(:set_test_env_dammit)
  end

  task :set_test_env_dammit do |t|
    if [ nil, "", "development", "staging", "production" ].index ENV['RAILS_ENV']
      RAILS_ENV = "test"
    end
  end
end
2
ответ дан 3 December 2019 в 11:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: