红宝石轨道 – 测试时以特定顺序加载轨道夹具

前端之家收集整理的这篇文章主要介绍了红宝石轨道 – 测试时以特定顺序加载轨道夹具前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法在运行测试时以特定的顺序加载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发现了这个.

猜你在找的Ruby相关文章