2013-03-06 2 views
8

Я использую Rails 4.0.0.beta1. Я добавил два каталога: app/services и test/services.rake: test не работает пользовательские тесты в подкаталоге

Я также добавил этот код, основанный на чтении testing.rake of railties:

namespace :test do 
    Rake::TestTask.new(services: "test:prepare") do |t| 
    t.libs << "test" 
    t.pattern = 'test/services/**/*_test.rb' 
    end 
end 

Я обнаружил, что rake test:services проходит испытания в test/services; однако rake test не запускает эти тесты. Похоже, это должно; вот code:

Rake::TestTask.new(:all) do |t| 
    t.libs << "test" 
    t.pattern = "test/**/*_test.rb" 
end 

Я что-то упустил?

ответ

11

Добавьте строку, как это после определения задач испытания:

Rake::Task[:test].enhance { Rake::Task["test:services"].invoke } 

Я не знаю, почему они не будут автоматически получать травление, но это единственное решение, которое я нашел, что работает Test :: Unit.

Я думаю, что если вы должны были запустить rake test:all, он проведет дополнительные тесты, но только rake test не будет без фрагмента выше.

+0

Хороший момент: '' test' и тест: all' задачи различны. –

+0

Re: «Я не знаю, почему их не получают автоматически» - я не знаю, было ли это намеренно или просто асимметрия, которая была развита по мере внесения изменений. Поэтому я добавил [комментарий к запросу на растяжение, который добавил тест: все задачи] (https://github.com/rails/rails/pull/9177#issuecomment-14575192). –

+0

Большое вам спасибо, Джим. – Ashitaka

4

Для тех, кто использует более позднюю версию Rails (4.1.0 в моем случае)

Использование Rails::TestTask вместо Rake::TestTask и переопределить run задачу:

namespace :test do 
    task :run => ['test:units', 'test:functionals', 'test:generators', 'test:integration', 'test:services'] 
    Rails::TestTask.new(services: "test:prepare") do |t| 
    t.pattern = 'test/services/**/*_test.rb' 
    end 
end 
3

решение Джима работает, однако в конечном итоге работает дополнительный набор тестов как отдельная задача, а не как часть целого (по крайней мере, используя Rails 4.1). Таким образом, статистика тестирования выполняется дважды, а не агрегируется. Я не чувствую, что это желаемое поведение здесь.

Это, как я в конечном итоге решить этот (с помощью Rails 4.1.1)

# Add additional test suite definitions to the default test task here 

namespace :test do 
    Rails::TestTask.new(extras: "test:prepare") do |t| 
    t.pattern = 'test/extras/**/*_test.rb' 
    end 
end 

Rake::Task[:test].enhance ['test:extras'] 

Это приводит в точности ожидаемого поведения, просто включая новый test:extras задачи в наборе задач, выполняемый rake test и, конечно, по умолчанию rake. Вы можете использовать этот подход, чтобы добавить любое количество новых наборов тестов таким образом.

Если вы используете Rails 3, я считаю, что только изменение на Rake::TestTask будет работать на вас.

3

Или просто запустить rake test:all

Если вы хотите, чтобы выполнить все тесты по умолчанию, переопределить тестовое задание:

namespace :test do 
    task run: ['test:all'] 
end