我的驗證包含一個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,塊,自定義驗證,沒有成功。
我想我學到了很多,但現在開始感到沮喪。有人能指導我解決我的錯誤嗎?
非常感謝。
戴夫,非常感謝你。這有很大幫助。我倚靠一些我不會忘記的東西。在RAILS_ENV = test rails c中擺弄,並(肯定)確認你寫了什麼。在測試控制檯環境中插入角色。它曾經工作過一次,但不是第二次。我必須更多地研究你提到的選項。 – user2498696
而且 - 順便說一句,試圖提高你的答案的評級。遺憾的是還沒有足夠的「聲譽」。你曾幫助過有人發表過他的第一篇文章。努力提高聲譽和鐵路技能。偉大的幫助提示,再次感謝... – user2498696
@ user2498696 IIRC每次運行測試時都會清除測試數據庫,因此您可以從完全已知的數據開始,儘管這可能取決於您如何將數據放入數據。接受答案是指示正確/最有用的標準方法,upvoting需要我想的一些代表。 –