Организация тестов 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

тогда вы получите вышеуказанную ошибку.

НТН