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

有没有办法在运行测试时以特定的顺序加载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发现了这个.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...