FactoryGirl与webmock

时间:2016-02-21 11:38:22

标签: ruby-on-rails rspec stub webmock

我的工厂有一个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配置中注册了一次webmock,足以让存根在整个测试套件中可用?为什么我必须这样做到我的工厂:

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的请求以及我应该如何存根...

1 个答案:

答案 0 :(得分:1)

是否填写了to_return来电帮助中的标题?

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

使用失败输出提供的值填充哈希值。