Организация тестов rspec 2 на категории "единица" и "интеграция" в рельсах
Как организовать тесты rspec 2 в категории "unit" (быстрая) и "интеграция" (медленная)?
- Я хочу иметь возможность запускать все модульные тесты только с помощью команды
rspec
, но не с тестами "интеграции".
- Я хочу иметь возможность запускать только тесты интеграции.
Ответы
Ответ 1
У нас есть группы одного и того же характера.
Затем мы запускаем один за другим как в локальных dev-блоках, так и на CI.
вы можете просто сделать
bundle exec rake spec:unit
bundle exec rake spec:integration
bundle exec rake spec:api
Вот что наш spec.rake выглядит как
namespace :spec do
RSpec::Core::RakeTask.new(:unit) do |t|
t.pattern = Dir['spec/*/**/*_spec.rb'].reject{ |f| f['/api/v1'] || f['/integration'] }
end
RSpec::Core::RakeTask.new(:api) do |t|
t.pattern = "spec/*/{api/v1}*/**/*_spec.rb"
end
RSpec::Core::RakeTask.new(:integration) do |t|
t.pattern = "spec/integration/**/*_spec.rb"
end
end
Ответ 2
Один из способов сделать это - пометить ваши тестовые примеры RSpec следующим образом:
it "should do some integration test", :integration => true do
# something
end
Когда вы выполняете свои тестовые примеры, используйте это:
rspec . --tag integration
Это выполнит все тестовые примеры с тегом :integration => true
. Подробнее см. В этой странице.
Ответ 3
Мне пришлось настроить тесты unit
и feature
следующим образом:
require 'rspec/rails'
namespace :spec do
RSpec::Core::RakeTask.new(:unit) do |t|
t.pattern = Dir['spec/*/**/*_spec.rb'].reject{ |f| f['/features'] }
end
RSpec::Core::RakeTask.new(:feature) do |t|
t.pattern = "spec/features/**/*_spec.rb"
end
end
Придется добавить require 'rspec/rails'
и изменить Rspec
на Rspec
в ответе @KensoDev.
Ответ 4
Обратите внимание на https://github.com/rspec/rspec-rails, они сообщают вам разместить драгоценный камень под "group: development,: test", как это,
group :development, :test do
gem 'rspec-rails', '~> 2.0'
end
но если вы разместите его только под: тестовая группа только,
group :test do
gem 'rspec-rails', '~> 2.0'
end
тогда вы получите вышеуказанную ошибку.
НТН