为什么固定装置中的ERB代码会抛出"未定义的方法"?

use*_*270 0 ruby testing ruby-on-rails

我正在尝试使用fixture来添加更复杂的测试数据,以便使用Flex中的前端测试特定的场景.我不确定这是用rails做正确的方法.我的rails应用程序是一款纸牌游戏,我试图测试的"更复杂的测试数据"是各种卡片组合.

例如,我想建立一个测试游戏,其中玩家1手中有牌B和C,我特意将牌B和C添加到玩家的手中.

我有玩家,游戏和用户的基本设备,已经存在一段时间并且工作正常.我试图在游戏夹具中添加以下erb代码,以调用Game.start方法,并且正在获取

NoMethodError: undefined method `games' for main:Object
Run Code Online (Sandbox Code Playgroud)

灯具代码片段是:

four:
  id: 4
  num_players: 3
  turn_num: 0
  status_id: 1

<% game_four = games(:four).find
   game_four.start
%>
Run Code Online (Sandbox Code Playgroud)

Sim*_*tti 5

game_four = games(:four).find
Run Code Online (Sandbox Code Playgroud)

游戏方法仅存在于测试用例中,而不存在于fixture中.您应该查询数据库或使用关系.这只是一个例子.

four:
  id: 4
  num_players: 3
  turn_num: 0
  status_id: 1

<% Game.find_by_name(four).start %>
Run Code Online (Sandbox Code Playgroud)

而且,这不是真正适合这种命令的地方.固定装置不是"开始游戏".您应该将此命令移动到其他位置,可能是在安装块内的专用测试用例中.

编辑:

我在这里复制了几天前在原始答案中发布的评论,其中包含新Rails数据库种子功能的链接:http://ryandaigle.com/articles/2009/5/13/what-s-new-in-边轨数据库播种

这是Yehuda Katz在他的回答中解释的那个,绝对是解决这个问题的最佳方法.