2016-02-21 8 views
1

Моей фабрики имеет 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...

+0

Вы когда-нибудь это понимали? Видя то же самое сейчас. Добавление проверки на модель, которая попадает в конечную точку API. Webmock stub не регистрируется, но он * работает * в спецификациях функций, которые попадают в ту же проверку. –

+0

После этого: https://robots.thoughtbot.com/how-to-stub-external-services-in-tests#sdctbs в spec_helper Я изменил 'before (: suite)' на 'before (: each)'. По-видимому, это не влияет на время тестового запуска, однако я не очень горжусь этим решением. – sonalkr132

+0

Хм, у меня уже был мой набор 'before (: each)'. Для меня решение заключалось в том, чтобы удалить запрос API при проверке AR. Я чувствую себя хорошо в этом, потому что я думаю, что это было правильное дизайнерское решение, но я хотел бы понять базовое * почему * для веб-сайта в проблеме FG. Больше информации здесь: https://github.com/18F/dolores-landingham-bot/pull/155#discussion_r57408981 –

ответ

1

ли заполнить заголовки в to_return вызова помощи?

.to_return(
    ..., 
    headers: { "Content-Type" => "application/json; charset=utf-8" } 
) 

заполнить хэш со значениями, указанными на выходе отказа.

+0

Извините, juanitofatas. Я уже пробовал это, и это не имеет никакого значения. – sonalkr132

 Смежные вопросы

  • Нет связанных вопросов^_^