Модульное тестирование Rails не загружает светильники
rake test:units
терпит неудачу в моем текущем приложении, потому что необходимые данные приборов отсутствуют.
Если я загружаю светильники вручную через rake db:fixtures:load RAILS_ENV=test
модульные тесты работают, но rake удаляет тестовую базу данных.
Мой test_helper включает в себя fixtures :all
и мои тесты наследуются от него - но приборы просто не загружаются.
Я сейчас немного невежественен, и мне действительно нужна помощь!
Я много пробовал и думаю, что это связано с некоторыми настройками среды или плагинами, используемыми в этом проекте. Кто-нибудь знает, где почитать о том, какие файлы загружаются для среды тестирования?
6 ответов
Я наконец-то нашел проблему, хотя решения вроде хакерские.
Один плагин полагается, что в базе данных есть некоторые данные, по крайней мере, одна строка. Итак, что случилось, было:
- rake загружает схему базы данных
- грабли пытаются загрузить окружение
- среда включает в себя плагин
- загрузка плагина не удалась из-за отсутствия хотя бы одной строки
- светильники не загружены
Хакерское решение: поместить необходимые данные непосредственно в схему, а не в фиксаторы, потому что они загружаются поздно.
Я буду искать более удобное решение и обновлю этот ответ, если найду его.
Другой подход - написать собственную тестовую задачу для тестирования.
Например:
task :test_units do
RAILS_ENV = 'test' # Force the environment to test
puts "Recreate the test database"
Rake::Task['db:test:prepare'].invoke
puts "Seed the database with fixtures"
Rake::Task['db:fixtures:load'].invoke
puts "Executing Unit Tests"
Rake::Task['test:units'].prerequisites.clear
Rake::Task['test:units'].invoke
end
Поместите звонок fixtures :all
в вашем тестовом классе, а не в суперклассе (test_helper). Я предполагаю, что инициализация суперкласса не работает так, как вы ожидаете, и что fixtures :all
не быть призванным Возможно, попробуйте поместить вызов в метод инициализации test_helper.
мой test/test_helper.rb
выглядит так:
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 for all tests in alphabetical order.
fixtures :all
# Add more helper methods to be used by all tests here...
end
Моя проблема забыта поставить "require 'test_helper'" в голову. например.
require 'test_helper'
class AdminUserTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end
Не уверен, что вы уже сделали это, но экспортируйте тестовые данные из базы данных в файлы yml в test/fixtures с помощью плагина типа ar_fixtures
У меня такая же проблема. Вернее, проблема заключалась в том, что мои приборы не соответствовали схеме базы данных. Вместо того, чтобы выдавать исключение, rails просто использовал тестовую базу данных в качестве запасного решения. Самый сомнительный