Моей фабрики имеет url
поле (используется для извлечения YouTube внедренного видео):FactoryGirl используется с webmock
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
Не регистрируя webmock раз в RSpec конфигурации достаточно для заглушки, чтобы быть доступны через вне тестов? Почему я того, чтобы сделать это на моей фабрике:
factory :commercial do
url 'https://www.youtube.com/watch?v=BTTygyxuGj8'
after(:build) do |commercial|
mock_request
end
end
без after(:build)
, я получаю следующее сообщение об ошибке:
Failure/Error: create(:commercial, WebMock::NetConnectNotAllowedError: Real HTTP connections are disabled. Unregistered request: ...tells me about unregistered request to youtube and how I should stub it...
Вы когда-нибудь это понимали? Видя то же самое сейчас. Добавление проверки на модель, которая попадает в конечную точку API. Webmock stub не регистрируется, но он * работает * в спецификациях функций, которые попадают в ту же проверку. –
После этого: https://robots.thoughtbot.com/how-to-stub-external-services-in-tests#sdctbs в spec_helper Я изменил 'before (: suite)' на 'before (: each)'. По-видимому, это не влияет на время тестового запуска, однако я не очень горжусь этим решением. – sonalkr132
Хм, у меня уже был мой набор 'before (: each)'. Для меня решение заключалось в том, чтобы удалить запрос API при проверке AR. Я чувствую себя хорошо в этом, потому что я думаю, что это было правильное дизайнерское решение, но я хотел бы понять базовое * почему * для веб-сайта в проблеме FG. Больше информации здесь: https://github.com/18F/dolores-landingham-bot/pull/155#discussion_r57408981 –