Запуск набора тестов rspec несколько раз с разными параметрами

#ruby #rspec

#ruby #rspec

Вопрос:

У меня есть набор спецификаций для запуска. Я хотел бы запускать спецификации несколько раз с разными параметрами каждый раз. Например, я тестирую сценарии SQL на двух разных версиях базы данных. Тестовые примеры те же, но строка подключения отличается. Как я этого добьюсь? Я новичок в RSpec, я смог заставить весь набор работать для одной версии. Просто нужно знать, как выполнить повторный запуск с другими параметрами?

Я посмотрел на Class:RSpec::Core::Runner , но из документации мне не очень понятно, как это можно использовать для запуска несколько раз?

Ответ №1:

Вы можете решить эту проблему с помощью переменных env. Допустим, вы хотите запустить rspec для двух разных баз данных MySQL. Вы можете определить свое подключение к БД следующим образом:

 db_client = Mysql2::Client.new(database: ENV['DB_NAME'])
  

Теперь вы можете запускать свой rspec следующим образом:

 DB_NAME=your_custom_db_name rspec
DB_NAME=other_db_name rspec
  

Комментарии:

1. Большое спасибо, Повилас! Это решает мою проблему, я надеялся изучить это с помощью RSpec-способа сделать это. Так что я могу применить его для гораздо более сложных наборов данных, управляемых данными. Знаете ли вы способ обработки данных в тестах RSpec?

2. Не существует «способа RSpec сделать это». RSpec на самом деле не знает и не заботится о вашей базе данных (ну, за исключением перехватов, которые проверяют ожидающие миграции в rspec-rails). Большинство драгоценных камней используют Travis вместе с переменными среды для тестирования на разных версиях ruby, базах данных и т.д.

Ответ №2:

Вы можете использовать shared_examples для достижения желаемого.

Вот пример:

 RSpec.describe 'shared_examples' do
  shared_examples 'is palendrome' do |word|
    it 'is equal to itself if reversed' do
      expect(word.reverse).to eq(word)
    end
  end

  context 'with the word racecar' do
    # Runs every example is the shared_examples block and passes
    include_examples 'is palendrome', 'racecar'
  end

  context 'with the word apple' do
    # Runs every example is the shared_examples block but fails
    include_examples 'is palendrome', 'apple'
  end
end