#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