ruby-on-rails - 任意或自定义URL的Rails功能测试

标签 ruby-on-rails url controller functional-testing

我的Rails应用程序中有一个RESTful资源,称为“照片”。我正在使用Paperclip提供我照片的不同“样式”(用于缩略图等),并且正在使用自定义路由来RESTful访问这些样式:

map.connect "photos/:id/style/*style", :controller => "photos", :action => "show"

很好,但是我想编写一个测试以确保它保持这种状态。

我已经有一个功能测试来调用Photo Controller 的show Action (实际上是由脚手架生成的):
test "should show photo" do
  get :show, :id => photos(:one).to_param
  assert_response :success
end

这将在URL“/photo/1”上测试 Action 的执行情况。现在,我要测试URL“/photo/1/style/foo”的执行情况。不幸的是,我似乎无法通过ActionController::TestCase来访问该URL。 get方法始终需要一个操作/ID,并且不接受URL后缀。

如何测试自定义网址?

更新

在检查@fernyb的答案时,我在the same rdoc中找到了此代码段

In tests you can simply pass the URL or named route to get or post. def send_to_jail get '/jail' assert_response :success assert_template "jail/front" end



但是,当我实际尝试时,出现错误消息:
test "should get photo" do
  get "/photos/1/style/original"
  assert_equal( "image/jpeg", @response.content_type )
end  

ActionController::RoutingError: No route matches {:action=>"/photos/1/style/original", :controller=>"photos"}

我想知道我做错了什么。

最佳答案

使用assert_routing测试路线:

assert_routing("/photos/10/style", :controller => "photos", :action => "show", :id => "10", :style => [])

assert_routing("/photos/10/style/cool", :controller => "photos", :action => "show", :id => "10", :style => ["cool"])

assert_routing("/photos/10/style/cool/and/awesome", :controller => "photos", :action => "show", :id => "10", :style => ["cool", "and", "awesome"])

然后,您可以在集成测试中执行以下操作:
test "get photos" do
   get "/photos/10/style/cool"
   assert_response :success
end

关于ruby-on-rails - 任意或自定义URL的Rails功能测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1656285/

相关文章:

javascript - 在 coffeescript 文件中使用 erb 更改背景

javascript - 为什么我会因 Jquery 而收到 500 错误?

java - 如何在 Android 中设置警告框,是否有任何 API 可以将数据从应用程序发送到 URL

asp.net-mvc-3 - ASP.NET MVC 3 添加 Controller 对话框中缺少脚手架选项

ruby-on-rails - 事件模型序列化器中的 Assets 管道

ruby-on-rails - Rails - 如何在链接和图像中利用不同的类

regex - 使用正则表达式验证 Youtube 播放列表 URL

linux - 如何在nagios中配置https_check URL

asp.net-mvc - 使用 MVC 时,如何调用 Controller Action 并传递文本框值?

api - Asp.Versioning.Http 模糊匹配异常 : The request matched multiple endpoints on controllers