在rails

时间:2016-02-26 16:23:03

标签: ruby-on-rails ruby ruby-on-rails-3 testing

我正在为我的应用程序编写集成测试。我熟悉控制器测试和正常的集成测试。但是,我不确定如何在集成测试中测试嵌套资源。我有一个团队模型嵌套在记分板模型中。相关的路线代码如下。

resources :scoreboards do 
   resources :teams, only: [:edit, :create, :destroy, :update]
 end

我想测试团队的所有重要工作流程。例如,团队的无效和有效创建。测试代码如下。

def setup
    ActionMailer::Base.deliveries.clear
    @scoreboard = scoreboards(:scoreboard_a)
  end



test 'Invalid creation of the teams' do
    assert_no_difference 'Team.count' do
      post scoreboards_teams_path(@scoreboard), team: {name: " ", 
                                                        win: 0, 
                                                       loss: 0, 
                                                        tie: 0 }

    end
  end 

我的验证设置必须是团队名称必须存在。问题在于路线。我还有一个与scoreboard_a建立的关联。 teams.yml文件如下。

team_a:
    name: team
    win: 1
    loss: 2
    tie: 0
    id: 2
    scoreboard: scoreboard_a 

我得到一个no方法错误。错误如下所示。

`NoMethodError: undefined method `scoreboards_teams_path'. 

由于团队嵌套在记分板显示页面内。因此,我没有可以调用get请求的新操作。我的问题是,我如何调用团队对象的帖子请求。我不确定该怎么做。我试过查看文档但是在嵌套路由上确实没有任何东西。我还有其他嵌套在记分板内的对象。因此,了解如何在rails中测试嵌套路由将会有很长的路要走。一如既往,非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

Rails指南中有一个关于嵌套助手资源的部分,可以充分回答您的问题:http://guides.rubyonrails.org/routing.html#nested-resources

您可以使用指定的帮助程序调用新操作:

new_scoreboard_team_path

为你命名的助手将是

scoreboard_teams_path

你的代码说了scoreboards_teams_path