我的工厂有一个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的请求以及我应该如何存根...
答案 0 :(得分:1)
是否填写了to_return
来电帮助中的标题?
.to_return(
...,
headers: { "Content-Type" => "application/json; charset=utf-8" }
)
使用失败输出提供的值填充哈希值。