我在Ruby脚本中有以下方法:
def parse_endpoint(endpoint)
return URI.parse(endpoint)
end
def verify_url(endpoint, fname)
url = “#{endpoint}#{fname}”
req = Net::HTTP.new(url.host, url.port)
res = req.request_head(url.path)
if res.code == “200”
true
else
puts “#{fname} is an invalid file”
false
end
end
手动测试url工作正常(返回true,因为url确实有效):
endpoint = parse_endpoint('http://mywebsite.com/mySubdirectory/')
verify_url(endpoint, “myFile.json”)
但是,当我尝试在rspec中执行以下操作时
describe 'my functionality'
let (:endpoint) { parse_endpoint(“http://mywebsite.com/mySubdirectory/”) }
it 'should verify valid url' do
expect(verify_url(endpoint, “myFile.json”).to eq(true))
end
end
它给了我这个错误
“NoMethodError:
undefined method `host' for "http://mysebsite.com/mySubdirectory/myFile.json":String”
我做错了什么?
答案 0 :(得分:2)
url是host
对象,您正在尝试访问String
中不存在的名为url = “#{endpoint}#{fname}”
req = Net::HTTP.new(url.host, url.port)
的方法:
2.2.1 :004 > require 'uri'
=> true
2.2.1 :001 > url = 'http://mywebsite.com/mySubdirectory/'
=> "http://mywebsite.com/mySubdirectory/"
2.2.1 :005 > parsed_url = URI.parse url
=> #<URI::HTTP http://mywebsite.com/mySubdirectory/>
2.2.1 :006 > parsed_url.host
=> "mywebsite.com"
编辑您可能需要一个URI对象。我想这就是你想要的:
url = URI.parse url
所以只需在使用url.host
之前添加var tables = document.querySelectorAll("table")
var elementToMove = tables[0].rows[0].cells[0]
var destination = tables[2].rows[0].cells[0]
destination.innerHTML = elementToMove.innerHTML
elementToMove.innerHTML = ""
。
答案 1 :(得分:1)
手动测试url工作正常(返回true,因为url确实有效):
endpoint = parse_endpoint('http://mywebsite.com/mySubdirectory/') verify_url(endpoint, “myFile.json”)
当您测试上面的代码(可能是测试旧版本)时,您似乎错过了一些东西,因为它现在无法正常工作。
看看这些代码行:
url = "#{endpoint}#{fname}"
req = Net::HTTP.new(url.host, url.port)
您正在从其他两个变量url
和endpoint
创建字符串变量fname
。到现在为止还挺好。
但是,您尝试访问host
变量上的方法url
,该变量不存在(但它存在于endpoint
变量上),这就是您收到此错误的原因
您可能希望使用此代码:
def verify_url(endpoint, fname)
url = endpoint.merge(fname)
res = Net::HTTP.start(url.host, url.port) do |http|
http.head(url.path)
end
# it's actually a bad idea to puts some text in a query method
# let's just return value instead
res.code == "200"
end