Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何对有约束的轨道线路进行功能测试?_Ruby On Rails_Functional Testing_Rails Routing - Fatal编程技术网

Ruby on rails 如何对有约束的轨道线路进行功能测试?

Ruby on rails 如何对有约束的轨道线路进行功能测试?,ruby-on-rails,functional-testing,rails-routing,Ruby On Rails,Functional Testing,Rails Routing,我有一个Rails 3应用程序,正在尝试为所有路由编写测试 想象一下这条非常简单的路线: resources :jobs, :constraints => {:id => /\d+/} 我现在想测试一下。在我的功能测试中,对于肯定的情况,使用In-Rails编写断言非常简单: assert_routing "jobs/4", { :controller => "jobs", :action => "show", :id => "4" } 断言否定的最好方式是什么

我有一个Rails 3应用程序,正在尝试为所有路由编写测试

想象一下这条非常简单的路线:

resources :jobs, :constraints => {:id => /\d+/}
我现在想测试一下。在我的功能测试中,对于肯定的情况,使用In-Rails编写断言非常简单:

assert_routing "jobs/4", { :controller => "jobs", :action => "show", :id => "4" }

断言否定的最好方式是什么?也就是说,没有通过约束的“作业/wibble”没有被路由,而是返回一个错误?有没有一些简单的方法来实现“assert\u not\u routing”或类似的东西?以前有人处理过这个问题吗?

您是否尝试过为路径断言一个nil路由?

我最终找到的解决方案是在功能测试中测试有效URL的路由,并在集成测试中测试无效URL的非路由

我创建了一个名为RouteTest的新集成测试类,并在其中存储了所有不应该路由到任何地方的URL

require 'test_helper'

class RoutesTest < ActionDispatch::IntegrationTest
  test "broken routes don't work" do
    assert_raise(ActionController::RoutingError) {
      get "/jobs/wibble"
    } 
  end
end
需要“测试助手”
类RouteTest

我仍然在功能测试中测试有效的路由。这里有一些测试神学失败的可能性最大:在我们提出的关于单元、集成和函数概念中特定测试应该去哪里的武断而相当荒谬的理论中,这似乎有点奇怪。但我宁愿完成这项工作,也不愿与人争论测试神学。所以我就是这么做的。

Tom-你不使用rspec有什么测试神学的原因吗。或者这不是你想要的?(不应该是可路由的)我不使用RSpec的主要原因是懒惰,以及过去Cucumber给我的Rails 2.x应用程序造成严重破坏的糟糕经历。我可能应该改用RSpec了。好吧,然后我会投票支持你的答案,因为它是“正确的”,而且现在还增加了一个有趣的附录“只是可能使用RSpec”!