Неверное количество аргументов в запросе Net::HTTP
В приложении Sinatra я пытаюсь создать свою собственную оболочку Net::HTTP
Но я застрял на одном из моих тестов. Я использую Webmock, чтобы заглушить запрос и передать его request
метод Net::HTTP
, Я делаю тестирование с RSpec. Я получаю ошибку:
Failure/Error: client.request(request)
ArgumentError:
wrong number of arguments (given 0, expected 1)
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/webmock-2.1.0/lib/webmock/http_lib_adapters/net_http.rb:279:in `method'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/webmock-2.1.0/lib/webmock/http_lib_adapters/net_http.rb:279:in `request_signature_from_request'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/webmock-2.1.0/lib/webmock/http_lib_adapters/net_http.rb:75:in `request'
# ./lib/net_http.rb:19:in `request'
# ./spec/net_http_spec.rb:21:in `block (2 levels) in <top (required)>'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/example.rb:236:in `instance_exec'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/example.rb:236:in `block in run'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/example.rb:478:in `block in with_around_and_singleton_context_hooks'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/example.rb:435:in `block in with_around_example_hooks'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/hooks.rb:478:in `block in run'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/hooks.rb:616:in `run_around_example_hooks_for'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/hooks.rb:478:in `run'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/example.rb:435:in `with_around_example_hooks'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/example.rb:478:in `with_around_and_singleton_context_hooks'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/example.rb:233:in `run'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/example_group.rb:581:in `block in run_examples'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/example_group.rb:577:in `map'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/example_group.rb:577:in `run_examples'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/example_group.rb:543:in `run'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/runner.rb:119:in `block (3 levels) in run_specs'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/runner.rb:119:in `map'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/runner.rb:119:in `block (2 levels) in run_specs'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/configuration.rb:1680:in `with_suite_hooks'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/runner.rb:118:in `block in run_specs'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/reporter.rb:77:in `report'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/runner.rb:117:in `run_specs'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/runner.rb:93:in `run'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/runner.rb:78:in `run'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/runner.rb:45:in `invoke'
# /home/admin/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rspec-core-3.4.4/exe/rspec:4:in `<top (required)>'
# /home/admin/.rbenv/versions/2.3.0/bin/rspec:23:in `load'
# /home/admin/.rbenv/versions/2.3.0/bin/rspec:23:in `<main>'
Линия 279 из net_http.rb
(первая строка стека):
method = request.method.downcase.to_sym
который находится внутри метода:
module WebMock
module NetHTTPUtility
def self.request_signature_from_request(net_http, request, body = nil)
...
который вызывается в строке 75 того же файла:
def request(request, body = nil, &block)
request_signature = WebMock::NetHTTPUtility.request_signature_from_request(self, request, body)
это метод, который я вызываю на моем клиенте. Это мои файлы:
net_http.rb
class NetHttp
def initialize(client)
@client = client
end
def request(request)
client.request(request)
end
private
attr_reader :client
end
net_http_spec.rb
describe "NetHttp" do
let(:client) {Net::HTTP.new(VERIFY_URL.host, VERIFY_URL.port)}
let(:net_http) {NetHttp.new(client)}
it "sends a get request" do
request = request_with_path
response = net_http.request(request)
expect(response.code).to eq("200")
end
def request_with_path
request = stub_request(:get, VERIFY_URL)
.with(:headers => {
'Accept'=>'*/*',
'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
'User-Agent'=>'Ruby'
})
.to_return(:status => 200, :body => '{"hello": "world"}', :headers => {})
class << request
attr_accessor :path
end
request.path = VERIFY_URL.request_uri
request
end
end
Последняя часть, где я добавляю атрибут на лету, должна была решить другую ошибку. Это похоже на грязный хак. Может быть, есть лучший способ сделать все это, что также помешает мне сделать это?
И в моем spec_helper.rb я добавил строку:
WebMock.disable_net_connect!(allow_localhost: true)
Я поместил содержимое запроса в request
метод и все, кажется, хорошо, я также использовал двойной Net::HTTPRequest
вместо заглушки webmock, но я получаю ту же ошибку. Я не хочу заглушить клиента, потому что это моя тестируемая система. Я также посмотрел на код request
метод в руби документации. Я не понимаю... откуда эта ошибка и как ее решить?
1 ответ
Вам не нужно использовать возвращаемое значение stub_request
как ты. Вы можете построить экземпляр Net::HTTP::Request
как обычно.