测试 Rails Guide 中的一个功能测试的疑问

Blues · 2015年03月04日 · 最后由 Blues 回复于 2015年03月13日 · 2991 次阅读

地址:http://guides.ruby-china.org/testing.html 4.1 功能测试要测试什么 节点下面的一段代码:

class PostsControllerTest < ActionController::TestCase
  test "should get index" do
    get :index
    assert_response :success
    assert_not_nil assigns(:posts)
  end
end

我重新 new 了一个 project,然后 scoffold 一个 post 资源

resources :posts

然后我在 test/conrtollers/posts_controller_test.rb 里面添加这么一段测试方法,发现总是提示:

ActionView::Template::Error: No route matches {:action=>"show", :controller=>"posts", :id=>nil} missing required keys: [:id]

我就奇怪为什么我的动作明明是选的 index,怎么就变成了 show,我直接 rake routes 看了下,里面是有 index 这个动作的,这可能是怎么回事呢?谢谢!

你加的是什么代码?

#1 楼 @shangrenzhidao 我就是想用一下功能测试,就想对 PostsController 里面的 index 方法做个测试,在测试里按照 guide 里面的描述,模拟发起一个 get 请求,看是否返回成功,有没有得到返回值。代码就是 guide 里面给出的代码,完全是一样的:

class PostsControllerTest < ActionController::TestCase
  test "should get index" do
    get :index
    assert_response :success
    assert_not_nil assigns(:posts)
  end
end

然后错误提示,我的测试的 action 是 show 不是 index,而导致我 get 的时候没有传递 post 的 id 参数而报错。

话说社区的这个 bug 一直没有解决,看图: 通过拖拉右下角的三角可以随意拉大输入框。

我的怎么可以,不需要自己手动写一行代码的

#4 楼 @shangrenzhidao 我再找找看,谢谢

#3 楼 @Blues 你提下 pull request 吧

#6 楼 @sanivbyfish 你也遇到这个问题吗?@shangrenzhidao说没问题,我今天没时间,还没测试呢,贸然提 pull request 不太好 搞错了,你说的应该是那个 bug 的问题,嗯,去 pull request 去。

#3 楼 @Blues 那不是 bug,是 chrome 的本事,你可以到别的网站试一下

#8 楼 @peter 但是 Safari 下也可以任意拉长。但是 YouTube 下的回复文本框就不会这样的

#9 楼 @shangrenzhidao IE 下就不会任意拉长,youtube 是定制的,你可以看一下 html 代码

#10 楼 @peter 哦,原来是 chrome 的原因,谢谢

需要 登录 后方可回复, 如果你还没有账号请 注册新账号