gpt4 book ai didi

ruby-on-rails - 自定义用户名路由的 RSpec 测试失败

转载 作者:行者123 更新时间:2023-12-02 02:19:03 25 4
gpt4 key购买 nike

我有一个匹配用户名的约束路由,如下所示:

controller :users, :path => '/:username', :as => :user, :constrain => { :username => /^_?[a-z]_?(?:[a-z0-9]_?)*$/i } do
# lots of nested routes go here
end

当我为此编写 RSpec 测试时(与正常使用 user_id 相比),所有测试都失败了,因为它“找不到路由”,即使它在服务器上运行良好.

describe "for an invalid request" do
it "should render a 404 if an associated photo is not found" do
# give it a bad photo id
xhr :post, :destroy, :id => "999999", :photo_id => "999999", :username => @photo_owner.username
# not found
response.status.should == not_found
end
end

当我在切换到用户名之前在我的路由中使用 user_id 时,这个测试工作正常:

resources :users do
# nested routes
end

xhr :post, :destroy, :id => "999999", :photo_id => "999999", :user_id => @photo_owner.id

那么我哪里做错了,发生了什么变化?

我的服务器控制台显示了这一点,这意味着我应该正确传递了所有参数:

Processing by TagsController#destroy as JS
Parameters: {"constrain"=>{"username"=>/^_?[a-z]_?(?:[a-z0-9]_?)*$/i}, "username"=>"rubynewb", "photo_id"=>"2004-the-title-of-the-photo-here", "id"=>"1797"}

最佳答案

在您的路由定义中使用 :constraints => {...}

您传递的参数过多...

"constrain"=>{"username"=>/^_?[a-z]_?(?:[a-z0-9]_?)*$/i}

Rails 不识别 :constrain,因此它和它的内容作为参数传递,而不是被 Rails 路由器处理。

关于ruby-on-rails - 自定义用户名路由的 RSpec 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9145115/

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