【问题标题】:Rails RSpec Routing: Testing actions in :except do NOT routeRails RSpec 路由:测试中的操作:除了不路由
【发布时间】:2011-11-05 08:36:45
【问题描述】:

相当简单的问题(我曾想过),但我遇到了一些问题:

在 Rails 3.1.0.rc6/RSpec 2.6.0 中,我正在尝试测试我的“产品”资源的路由,路由如下:

resources :products, :except => [:edit, :update]

有效操作的路由有效,但我想确保编辑和更新路由不可调用。这是我正在尝试的:

it "does not route to #edit" do
  lambda { get("/products/1/edit") }.should raise_error
end

失败/错误:lambda { get("/products/1/edit") }.should raise_error 预期异常,但未引发任何异常 # ./spec/routing/products_routing_spec.rb:11:in `block (3 级) 在'

...然而,当我跑步时

it "does not route to #edit" do
  get("/products/1/edit").should_not route_to("products#edit", :id => "1")
end

我明白了

失败/错误:get("/products/1/edit").should_not route_to("products#edit", :id => "1") 动作控制器::路由错误: 没有路线匹配“/products/1/edit”

知道这里发生了什么吗?我猜这应该很简单,但我似乎无法弄清楚。

【问题讨论】:

    标签: ruby-on-rails routing rspec


    【解决方案1】:

    我不知道为什么 lambda 会失败,但我不认为 rspec-rails dsl 打算这样使用。你有没有尝试过这样的事情?

    { :get => "/products/1/edit" }.should_not be_routable
    

    http://relishapp.com/rspec/rspec-rails/docs/routing-specs/be-routable-matcher

    所以你不能指定它不路由到什么,但你可以指定它不被路由。

    【讨论】:

    • 我们有一个赢家。奇怪 - 我认为 Rails 2 曾经处理“引发错误”的 lambda,但显然不是 3.1。甚至不知道 be_routeable 方法 - 非常感谢。
    • 非常有用!一个简短的说明:上述测试必须在 /spec/routing/xxxx.rb 中,否则它将失败并出现错误。例如,你不能在 /spec/requests/xxxx.rb 中拥有这个
    【解决方案2】:

    你有后备路线吗?因为这可以解释为什么没有抛出错误,但实际上尝试评估 route_to("products#edit", :id => 1) 会引发,因为路由不存在。

    【讨论】:

    • 好主意,但没有。这是一个光秃秃的项目——实际上是从今天下午开始的。没有设置重定向 - 目前它只是未触及的裸脚手架资源、rspec 和 cucumber。
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 2018-10-01
    相关资源
    最近更新 更多