2013-06-21 53 views
1

我的驗證包含一個pluck(:id)語句。驗證在控制檯中工作,但在test_helper中失敗。如果我用數組替換那個函數,函數會返回,所有的測試都通過控制檯和test_helper傳遞。Rails3驗證控制檯在test_helper中失敗

下面是詳細信息:

我上的Kubuntu 12.04運行Rails 3.2.13。

建立兩個模型在處女項目:

用戶 - 軌G型用戶ROLE_ID:整數

角色 - 軌G型角色ROLE_NAME:字符串

應用程序/模型/user.rb

class User < ActiveRecord::Base 
attr_accessible :role_id 

#validates :role_id, inclusion: { in: [1, 2, 3] } # validation using the result array. 
validates :role_id, inclusion: { in: Role.pluck(:id) } # validation using the pluck(:id) function. 

end 

app/models/role.rb is as generate d。

使用控制檯添加了三個角色。 id是[1,2,3]。

在控制檯中檢查驗證。

u = User.new(role_id: 1) 
u.valid? 
=> true 
u.role_id = 5 # value out-of-range 
u.valid? 
=> false 
u.role_id = 2 # value in range 
u.valid? 
=> true 

所以,這種驗證似乎按預期工作。

u.save 

也工作。

然後,加入試驗:

測試/單元/ user_test.rb

require 'test-helper' 
class UserTest < ActiveSupport::TestCase 
test "role_id must be valid" do 
    @u = User.new(role_id: 1) 
    assert(@u.valid?,"Invalid role") 
end 
end 

冉測試與

rake test 

測試失敗,雖然ROLE_ID是正確由控制檯結果證實。

如果我與評論一個以上

validates :role_id, inclusion: { in: [1, 2, 3] } 

替換應用程序/模型/ user.rb驗證並註釋掉其他驗證,測試通過和控制檯通過。與rspec相同的效果。我現在重複了這幾次,總是有同樣的效果。在這個網站上發現了很多有趣的東西,並玩過proc,lambda,塊,自定義驗證,沒有成功。

我想我學到了很多,但現在開始感到沮喪。有人能指導我解決我的錯誤嗎?

非常感謝。

回答

0

測試運行在不同的環境和數據庫(測試環境/數據庫,並非巧合)。

你需要有一些測試數據,比如角色。

有多種選擇,包括像Factory Girl,DB種子等等。

您可以通過在測試enironment開始創建控制檯相同故障:

RAILS_ENV=test rails c 
+0

戴夫,非常感謝你。這有很大幫助。我倚靠一些我不會忘記的東西。在RAILS_ENV = test rails c中擺弄,並(肯定)確認你寫了什麼。在測試控制檯環境中插入角色。它曾經工作過一次,但不是第二次。我必須更多地研究你提到的選項。 – user2498696

+0

而且 - 順便說一句,試圖提高你的答案的評級。遺憾的是還沒有足夠的「聲譽」。你曾幫助過有人發表過他的第一篇文章。努力提高聲譽和鐵路技能。偉大的幫助提示,再次感謝... – user2498696

+0

@ user2498696 IIRC每次運行測試時都會清除測試數據庫,因此您可以從完全已知的數據開始,儘管這可能取決於您如何將數據放入數據。接受答案是指示正確/最有用的標準方法,upvoting需要我想的一些代表。 –