有没有办法在运行测试时以特定的顺序加载Rails灯具?例如,采取以下类…
class User < ActiveRecord::Base has_many :memberships has_many :groups,through: :memberships end class Group < ActiveRecord::Base has_many :memberships has_many :users,through: :memberships end class Membership < ActiveRecord::Base belongs_to :user belongs_to :group end
成员资格具有数据库级外键约束,要求用户和组在创建之前存在.但是,由于Rails按字母顺序加载了成员资格,因此会在用户之前加载成员资格,并发生错误,表示关系不存在(正确地如此).
ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR: insert or update on table "memberships" violates foreign key constraint
在运行测试之前加载成员资格有没有办法加载用户和组灯具?
解决方法
您的问题不是Rails运行测试的顺序.我有同样的问题,在调试了几个小时后,意识到ActiveRecord实际上禁用参考完整性插入夹具记录,以防止这些类型的错误Postgresql.
您的测试数据库用户必须在ActiveRecord的测试数据库上具有超级用户权限才能成功地禁用灯具所需的参照完整性.
>使用您的默认超级用户登录Postgresql(我的是“postgres”)
>执行以下命令:
ALTER ROLE yourtestdbuser WITH SUPERUSER;
享受正确的工作装置.
当一个人使用Postgresql和没有超级用户角色的用户运行测试数据库时,下一个版本的Rails将会有一个警告(我认为是非常需要的).我在a Rails GitHub issue suggesting the warning发现了这个.