Модульное тестирование Rails не загружает светильники

rake test:units терпит неудачу в моем текущем приложении, потому что необходимые данные приборов отсутствуют.

Если я загружаю светильники вручную через rake db:fixtures:load RAILS_ENV=test модульные тесты работают, но rake удаляет тестовую базу данных.

Мой test_helper включает в себя fixtures :all и мои тесты наследуются от него - но приборы просто не загружаются.

Я сейчас немного невежественен, и мне действительно нужна помощь!

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

6 ответов

Решение

Я наконец-то нашел проблему, хотя решения вроде хакерские.

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

  1. rake загружает схему базы данных
  2. грабли пытаются загрузить окружение
  3. среда включает в себя плагин
  4. загрузка плагина не удалась из-за отсутствия хотя бы одной строки
  5. светильники не загружены

Хакерское решение: поместить необходимые данные непосредственно в схему, а не в фиксаторы, потому что они загружаются поздно.

Я буду искать более удобное решение и обновлю этот ответ, если найду его.

Другой подход - написать собственную тестовую задачу для тестирования.

Например:


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 просто использовал тестовую базу данных в качестве запасного решения. Самый сомнительный

Другие вопросы по тегам