Ваш test/test_helper
файл должен был быть создан при создании приложения.Он содержит это ценное содержимое:
ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
#
# Note: You'll currently still have to declare fixtures explicitly in integration tests
# -- they do not yet inherit this setting
fixtures :all
# Add more helper methods to be used by all tests here...
end
Вторая строка здесь наиболее важна: для нее требуется файл config/environment.rb
в корне вашего приложения, что, в свою очередь, требует много других вещей, включаяценный (мне нравится это слово сегодня, хорошо?) ActiveSupport
константа.
Когда вы генерируете контроллер, модель или каркас, он также генерирует тесты для них.Я просто запустил rails g scaffold ticket
в своем приложении, и оно сгенерировало test/unit/ticket_test.rb
, которое содержит это:
require 'test_helper'
class TicketTest < ActiveSupport::TestCase
# Replace this with your real tests.
test "the truth" do
assert true
end
end
В первой строке этого файла потребуется файл test/test_helper.rb
, который мы только что увидели.Это загрузит ActiveSupport
и класс TestCase
внутри него, что сделает этот тест выполнимым.Все остальное просто идет оттуда.
Со всеми этими объяснениями (даже если это то, что вы уже знаете), я делаю большую ставку на то, что маскирует ваше LOAD_PATH
,вызывая удаление каталога test
из него.
Что действительно необычно, так это то, что когда вы указываете полный путь к test/test_helper.rb
, вы говорите, что он загружает его, но ActiveSupport
по-прежнему не определен,Ну, это должно быть загружено в соответствии с описанием выше.Это на самом деле загрузка config/environment.rb
?Можете ли вы поставить что-то вроде:
puts "LOADING CONFIG/ENVIRONMENT.RB"
в верхней части файла config/environment.rb
, а затем снова запустить тесты?Это должен быть вывод.Очень необычно.
Продолжая тему о LOAD_PATH
... Есть маленький грязный секрет, о котором вы нам не рассказываете?
На самом деле, Дэн Чейл делаетхороший момент.Вы можете запускать тесты, используя ruby test/unit/ticket_test.rb
, в этом случае test_helper
будет недоступно, но все равно это не объясняет, почему при указании полного пути вы все равно получаете неопределенную константу ActiveSupport
.
Если вы хотите запустить один тест, вы должны сделать следующее:
ruby -Itest test/unit/ticket_test.rb
Эта опция -I
добавляет каталог test
в путь загрузки, что означает test_helper
файл будет доступен через прямой require 'test_helper'
.Если после этого все равно произойдет ошибка, я считаю, что ваш test/test_helper.rb
пуст или поврежден.