На моей фабрике есть поле url
(используется для извлечения встроенного видео YouTube):
factory :commercial do
url 'https://www.youtube.com/watch?v=BTTygyxuGj8'
end
В своих тестах я пытался издеваться над запросом на youtube. Я добавил следующее к своему spec_helper
:
require 'webmock/rspec'
WebMock.disable_net_connect!(allow_localhost: true)
RSpec.configure do |config|
config.before(:suite) do
mock_request
end
end
def mock_request
response = {
author_name: 'Confreaks',
# more attributes omitted ..
}
WebMock.stub_request(:get, /.*youtube.*/).
to_return(status: 200, body: response.to_json, headers: {})
end
Разве недостаточно зарегистрировать веб-макет один раз в конфигурации rspec, чтобы заглушка была доступна через набор тестов? Почему я должен делать это с моей фабрикой:
factory :commercial do
url 'https://www.youtube.com/watch?v=BTTygyxuGj8'
after(:build) do |commercial|
mock_request
end
end
Без after(:build)
я получаю следующую ошибку:
Сбой/Ошибка: create(:commercial, WebMock::NetConnectNotAllowedError: Реальные HTTP-соединения отключены. Незарегистрированный запрос: ...сообщает мне о незарегистрированном запросе на YouTube и о том, как его заглушить...
before(:suite)
наbefore(:each)
. Кажется, это не влияет на время выполнения теста, однако я не очень горжусь этим решением. - person sonalkr132   schedule 25.03.2016before(:each)
. Для меня решением было удалить запрос API при проверке AR. Мне это нравится, потому что я думаю, что это было правильное дизайнерское решение, но я хотел бы понять, что лежит в основе почему веб-мока в проблеме FG. Подробнее здесь: github.com/18F/dolores-landingham-bot/ тянуть/ - person Jessie A. Young   schedule 25.03.2016