Rails 3功能测试 - 'get()'无法访问控制器方法

时间:2011-11-28 08:29:04

标签: ruby-on-rails testing get functional-testing

在我的项目中,故事属于用户,通常所有故事访问都是通过嵌套资源进行的,但显示所有故事的全局列表的操作除外。在我的routes.rb文件中,我有:

 resources :users do
    resources :stories
 end
 match "/all_stories" => "stories#all_stories"  

match语句生成以下路由:

all_stories   /all_stories(.:format)    {:controller=>"stories", :action=>"all_stories"}

在我的stories_controller.rb文件中,我有一个名为all_stories的操作。

  def all_stories
    @stories = Story.all
  end

从我看来,我以这种方式打电话给link_to

<%= link_to  "All Stories", all_stories_path %>

导致此错误:

No route matches {:action=>"show", :controller=>"stories", :user_id=>nil, 
:id=>#<Story id: 1, title: "test story 01", desc: "Edited desc for test story 01",
activity: 20, created_at: "2011-11-28 01:07:08", updated_at: "2011-11-28 01:26:31", 
user_id: 5>}

在我的stories_controller_test.rb中,:all_stories的以下GET调用会生成列出的错误:

get( 'all_stories' )
Undefined method `story_path' for #<#<Class:0x0000010430da18>:0x00000101789d10>

get( :all_stories )
undefined method `story_path' for #<#<Class:0x00000102a178b0>:0x00000100ee9cc8>

get( '/all_stories' )
No route matches {:controller=>"stories", :action=>"/all_stories"}

get( {:action=>"all_stories"} )
No route matches {:controller=>"stories", :action=>"{:action=>\"all_stories\"}"}

在前两个,没有'story_path',因为故事嵌套在用户之下。不确定接下来两个会发生什么。我可以使用什么语法get all_stories我的控制员?

2 个答案:

答案 0 :(得分:1)

尝试将路线更改为

match "/all_stories" => "stories#all_stories", :as => :all_stories

然后在您的代码中,您可以引用all_stories_pathall_stories_url

答案 1 :(得分:0)

我遇到了这个问题,但我能够使用@controller解决它 使用@contr