FactoryGirl используется с веб-макетом

На моей фабрике есть поле 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 и о том, как его заглушить...


person sonalkr132    schedule 21.02.2016    source источник
comment
ты когда-нибудь это понял? Видя то же самое сейчас. Добавление проверки модели, которая достигает конечной точки API. Заглушка Webmock не регистрируется, но работает в спецификациях функций, прошедших ту же проверку.   -  person Jessie A. Young    schedule 25.03.2016
comment
После этого: robots.thoughtbot.com/ в spec_helper я изменил before(:suite) на before(:each). Кажется, это не влияет на время выполнения теста, однако я не очень горжусь этим решением.   -  person sonalkr132    schedule 25.03.2016
comment
Хм, у меня уже было установлено значение before(:each). Для меня решением было удалить запрос API при проверке AR. Мне это нравится, потому что я думаю, что это было правильное дизайнерское решение, но я хотел бы понять, что лежит в основе почему веб-мока в проблеме FG. Подробнее здесь: github.com/18F/dolores-landingham-bot/ тянуть/   -  person Jessie A. Young    schedule 25.03.2016


Ответы (1)


Помогает ли заполнение заголовков в to_return вызове?

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

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

person Juanito Fatas    schedule 22.02.2016
comment
Извини, хуанитофатас. Я уже пробовал это, и это не имеет никакого значения. - person sonalkr132; 22.02.2016