我在使用外鍵的燈具設置測試時遇到了問題!如果有人能幫助我理解這一點,我將非常感激。例如,:user_type
模型引用了:role
模型,當測試被執行時,並且測試數據庫中的所有數據被刪除以再次被重新插入時,Rails首先從角色模型中刪除數據而不是首先從:user_type
刪除數據,然後從:role
刪除數據。Ruby on Rails使用外鍵刪除燈具
的燈具:
#roles.yml
technical:
name: 'Technical'
obs: 'User Role for technical/maintenance users!'
#user_types.yml
technic:
role: technical
name: 'Technic'
is_admin: true
測試:
#app/test/models/role_test.rb
require 'test_helper'
class RoleTest < ActiveSupport::TestCase
fixtures :roles
test 'save Role without name' do
data = Role.new()
data.valid?
assert data.errors.added?(:name, :blank), 'Role saved without name!'
end
end
#app/test/models/user_type_test.rb
require 'test_helper'
class UserTypeTest < ActiveSupport::TestCase
fixtures :user_types
test 'save User Type without role_id' do
data = UserType.new(:name => 'public')
data.valid?
assert data.errors.added?(:role_id, :blank), 'User Type saved without role'
end
end
當測試運行的第一次,一切都OK。 Rails清理數據庫(在這一點上仍然是空的,所以沒有違反約束),然後插入燈具的數據,測試運行良好。 下次我嘗試運行測試時,它們會失敗,因爲當rails開始從數據庫中刪除數據時,它將以角色模型/表而不是user_type開始!由於在這些模型中定義的外鍵會發生違規,因爲user_type仍然引用模型表中的數據!
這應該如何正確完成? 有沒有任何機制可以告訴導軌銷燬燈具數據的命令?順便說一句,我使用RubyOnRails 4和Firebird 2.5。
我一直在爲此奮鬥了幾天,我一直沒有做到這一點!
預先感謝您!
我還沒有嘗試過自己,但您可以查看http://api.rubyonrails.org/classes/ActiveRecord/TestFixtures.html並覆蓋ActiveSupport :: TestCase公共接口,如test/test_helper.rb中的setup/teardown。 。如果它不工作,不要downvote我:) – sethi