2010-02-10 58 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