Rob Bikmansurov bio photo

Rob Bikmansurov

I enjoy playing basketball and running, I'm a CIO in an average universal bank, I'm software developer (RubyOnRails, Python, VB). I like to create information systems and programs and try something new

Email Twitter Github Gitlab

Для развёртывания стандартной среды тестирования обычно нужно установить и настроить привычные инструменты.

Добавляем указанные ниже гемы в Gemfile, запускаем bundle install, чтобы установить эти библиотеки локально.

Rspec

Rspec - основной инструмент для unit-тестирования. А вот здесь хороший справочник по использованию Rspec в Rails.

group :development, :test do
  ...
  gem 'rspec-rails', '~> 3.5'
end

Запускаем bundle install, а затем bundle exec rails generate rspec:install, чтобы создать структуру каталогов spec/.

Shoulda matchers

Shoulda Matchers облегчит и ускорит тестирование за счет своих врапперов для валидаций, ассоциаций и редиректов.

group :development, :test do
  ...
  gem 'shoulda-matchers', '~> 3.1'
end

В spec/rails_helper.rb нужно добавить его настройки:

Shoulda::Matchers.configure do |config|
  config.integrate do |with|
    with.test_framework :rspec

    with.library :active_record
    with.library :active_model
    with.library :action_controller
    with.library :rails
  end
end

FactoryBot

factory_bot - отличная вещь для наполнения базы данных разнообразными объектами. Можно использовать как для тестов, так и для начальной инициализации базы данных и заселения её объектами для разработчиков (db/seeds.rb).

group :development, :test do
  ...
  gem 'factory_bot_rails'
end

После установки нужно создать свои фейковые модели в spec/factories/

Database Cleaner

Database Cleaner незаменим для поддержания нашей тестовой базы данных в здоровом состоянии. Имеет развитые средства управления стратегиями очистки.

group :test do
  gem 'database_cleaner'
end
# spec/rails_helper.rb
RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)
  end

  config.around(:each) do |example|
    DatabaseCleaner.cleaning do
      example.run
    end
  end
end

rails-controller-testing

rails-controller-testing расширяет наши тесты контроллеров операторами assigns и assert_templates.

Cucumber

Cucumber Rails нужен для приемочных (asseptans) тестов

group :development, :test do
  ...
  gem 'cucumber-rails', require: false
end

bundle exec rails generate cucumber:install создаст структуру spec/features/

На этом процесс подготовки можно считать законченным и можем переходить к написанию тестов.