2010-02-10 80 views
1

我正在使用测试来测试我的应用程序。我有一些灯具:users.yml,roles.yml,roles_users.yml。用户和角色被加载,但不是多对多表角色_用户,因此用户与任何角色都没有关系。在开发Rails控制台时,一切都可以,在测试中,任何用户都没有连接到任何角色。我可以在测试数据库中看到用户和角色,但roles_users为空测试不会加载很多夹具

我是否必须指定某处如何加载此夹具?

+0

你能告诉我们你的测试代码和你的灯具吗? – 2010-02-10 12:02:31

+0

我可以使用此命令加载灯具RAILS_ENV = test rake db:fixtures:load FIXTURES = roles_users 此博客文章有很好的灯具提示:http://techpolesen.blogspot.com/2007/04/rails-fixture -tips.html – rtacconi 2010-02-10 12:38:04

回答

2

如果您使用Rails> = 2.2以及用户和角色之间的标准HABTM关联,则不需要roles_users.yml文件。相反,添加roles线为每个用户在users.yml

sally: 
    roles: admin, editor 
    ... 

fred: 
    roles: basic 
    ... 

的值是你的角色灯具的名称。我不完全确定这会解决您的问题,但至少它更干净。

+0

是的,Rails 2.4没有加载HABTM。不过,我可以在我的environment.rb中使用; ENV [ '兴业'] || = 'roles_users' – rtacconi 2010-02-10 15:05:49

+0

当使用溶液中的roles_users表,而不是具有: USER_ID = 1,ROLE_ID = 1 具有: USER_ID = 1232342,ROLE_ID = 1 为什么USER_ID具有weired id? 测试失败,因为role_id 1未连接到user_id 1 – rtacconi 2010-02-10 15:48:32

+0

在Rails中使用Fixture时,接受的做法是不为每个对象分配一个显式ID,但让Rails为您做。它将把ID作为夹具的名称,以便你可以在测试中加载一个名称(例如:'users(:fred)'或者'roles(:admin)')。您最终会得到一些用于ID的长数字,但您永远不必知道它们 - 您可以在测试中使用灯具名称而不是ID,这使得它们更易于阅读。 – 2010-02-10 16:01:40