Запуск Pact против тестовой среды в Rails API
Просто поигрался с Pact против моего Rails API и заметил, что стандартная настройка Pact по умолчанию работает против среды разработки.
Как настроить запуск в "тестовой" среде без указания ее в командной строке при запуске задачи (RAILS_ENV=test). Не могу легко найти в документации, как это сделать.
Используя следующие драгоценные камни:
pact (1.10.0)
pact-mock_service (0.12.1)
pact-support (0.6.0)
pact_helper.rb:
require 'pact/provider/rspec'
Pact.service_provider 'Auslan API Service' do
honours_pact_with 'Auslan Web App' do
# This example points to a local file, however, on a real project with a continuous
# integration box, you would use a [Pact Broker](https://github.com/bethesque/pact_broker) or publish your pacts as artifacts,
# and point the pact_uri to the pact published by the last successful build.
pact_uri './user-specs-user-api.json' # need to update this
end
end
Pact.configure do | config |
config.diff_formatter = :embedded
end
Pact.provider_states_for 'User-Specs' do
provider_state 'there are users already added inside the database' do
set_up do
user1 = User.create(email: 'abcd@a.au', first_name: 'Jane', last_name: 'Doe', password: 'abcd#1234')
# set the Auth token
token = Knock::AuthToken.new(payload: { sub: user1.id }).token
pacts = File.join(File.dirname(File.expand_path(__FILE__)), '../../user-specs-user-api.json')
Dir.glob(pacts).each do |f|
text = File.read(f)
output_of_gsub = text.gsub(/\"Authorization\"\s*:\s*\".+\"/) { "\"Authorization\": \"Bearer #{token}\"" }
File.open(f, "w") { |file| file.puts output_of_gsub }
end
end
end
end
Спасибо мо
1 ответ
Я не написал никакого кода, чтобы это произошло. Часть кода, в которую загружается приложение, находится здесь: https://github.com/realestate-com-au/pact/blob/master/lib/pact/provider/configuration/service_provider_dsl.rb#L16
Вы можете переопределить приложение в конфигурации, если у вас есть дескриптор, но я не могу вспомнить, как это сделать с приложением Rails на моей голове. Возможно, вы могли бы поиграть со сборщиком Rack и посмотреть, сможете ли вы передать ему какие-либо переменные окружения. Я был бы рад принять пиар, если вы можете решить, как это сделать.