gpt4 book ai didi

ruby-on-rails - 如何使用 application_helper_spec.rb 中的特定 URL 测试请求对象?

转载 作者:行者123 更新时间:2023-12-01 09:06:47 25 4
gpt4 key购买 nike

我在 application_helper.rb 中定义了一个方法,它根据当前请求返回一个规范的 URL。如何模拟或以其他方式为 Controller 指定完整的 URL?

# spec/helpers/application_helper_spec.rb
describe "#canonical_url" do
it "should return a path to an asset that includes the asset_host" do
# Given: "http://www.foo.com:80/asdf.asdf?asdf=asdf"
helper.canonical_url().should eq("http://www.foo.com/asdf.asdf")
end
end

# app/helpers/application_helper.rb
def canonical_url
"#{request.protocol}#{request.host}#{(request.port == 80) ? "" : request.port_string}#{request.path}"
end

编辑:

最终我想测试 canonical_url() 是否为一堆不同的 URL 返回正确的字符串,一些带有端口,一些不带端口,一些带有查询字符串,一些带有路径等。也许这有点矫枉过正,但这就是最终目标。我想明确地 stub /模拟/无论初始 URL,然后在匹配器中明确设置期望。我希望能够在一个电话中做到这一点,即 controller.request.url = 'http://www.foo.com:80/asdf.asdf?asdf=asdf'request = ActionController::TestRequest.new :url => 'http://www.foo.com:80/asdf.asdf?asdf=asdf' 但到目前为止我还没有找到一个“钩子(Hook)” “这让我可以这样做。这就是我正在寻找的解决方案。 如何明确定义给定测试的请求 URL。

最佳答案

我会做的:

helper.request.stub(:protocol).and_return("http://")
helper.request.stub(:host).and_return("www.foo.com")
helper.request.stub(:port).and_return(80)
helper.request.stub(:port_string).and_return(":80")
helper.request.stub(:path).and_return("/asdf.asdf")
helper.canonical_url.should eq("http://www.foo.com/asdf.asdf")

关于ruby-on-rails - 如何使用 application_helper_spec.rb 中的特定 URL 测试请求对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6478830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com