Модульное тестирование Rails не загружает светильники - PullRequest
9 голосов
/ 10 октября 2009

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

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

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

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

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

Ответы [ 6 ]

5 голосов
/ 21 октября 2009

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

Например:


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

5 голосов
/ 10 октября 2009

Поместите вызов на 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
4 голосов
/ 12 октября 2009

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

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

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

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

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

0 голосов
/ 03 января 2018

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

require 'test_helper'

class AdminUserTest < ActiveSupport::TestCase
  # test "the truth" do
  #   assert true
  # end
end
0 голосов
/ 28 сентября 2010

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

0 голосов
/ 10 октября 2009

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

...