2009-10-10 3 views
9

rake test:units не работает в моем текущем приложении, так как отсутствуют необходимые данные приборов.Rails unit testing не загружает светильники

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

В test_helper входит fixtures :all, и мои тесты наследуются от него, но приборы просто не загружаются.

В какой-то момент я немного не знаю, и мне действительно нужна помощь!

Спасибо и до свидания,

Джо

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

+1

Для чего это стоит, я столкнулся с аналогичной проблемой, за исключением того, что определял константу, основанную на записи базы данных. Переместил эту константу в переменную экземпляра и booya. Похож на то, что константы будут определены до того, как приборы также будут загружены. Приветствия. –

ответ

3

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

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

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

Хакерное решение: поместить необходимые данные непосредственно в схему, а не в светильники, поскольку она загружена до конца ,

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

+3

Плагины не должны делать такие вещи. Лучшее, что нужно сделать, это исправить плагин и отправить им запрос на перенос на github. –

+0

Я исправил проблему внутри плагина и вскоре отправил патч. ;) – xijo

0

Не уверен, что если вы уже сделали это, но экспортировать тестовые данные из базы данных в YML файлов в тесте/светильниках с помощью плагина, как ar_fixtures

+0

Хмм, проблема в том, чтобы получить данные из светильников в базу данных, я думаю, что ar_fixtures делает наоборот! :) – xijo

+0

oh oops :) извините, неверно прочитал вопрос – Jen

5

Поместите вызов fixtures :all в тестовом классе, а не супер class (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 
+0

Привет, cstump, я попытался поместить 'fixtures: all' прямо в мой тестовый класс, но это не сработало. Кажется, что вызов не имеет никакого эффекта, но я просто не могу понять почему! – xijo

+0

+1: Это сработало для меня, и мне нравится это решение, потому что оно локально и явно. В этом случае достаточно «приборов: пользователей» в 'UserControllerTest'. – Johnsyweb

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 

+0

Это работало для меня, +1. Единственное различие заключалось в том, что мне пришлось поставить 'RAILS_ENV = 'test'' после' db: test: prepare', иначе Sqlite3 завершится ошибкой, заявив, что у меня нет правильных разрешений для очистки тестовой БД. –

0

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

0

Моя проблема забыта поставить «require» test_helper «по голове». например.

require 'test_helper' 

class AdminUserTest < ActiveSupport::TestCase 
    # test "the truth" do 
    # assert true 
    # end 
end