如何通过factory-girl去定义测试数据中的用户角色?
这里直接拷贝过来的,就不在另外排版了。
很多时候我们都会使用 factory-girl 去构建测试数据,但如何去定义表之间的关系,特别是那种用户角色、权限之类的,接下来就稍微总结下如何用factory girl 去定义测试数据中的用户角色。
(资料图片)
1.Many-to-Many
假定用户角色是通过many-to-many的关系定义的,比如结构是如下定义的:
class User < ActiveRecord::Base
has_many :user_roles
has_many :roles, :through => :user_roles
end
class UserRole < ActiveRecord::Base
belongs_to :user
belongs_to :role
end
class Role < ActiveRecord::Base
attr_accessible :name
has_many :user_roles
has_many :users, :through => :user_roles
end
1.1通过seeds.rb
先介绍下一种简单的处理,通过加载seeds.rb,预先生成“role”
seeds.rb
Role.delete_all
Role.create!([{ name: "admin" }, { name: "member" }])
在spec_helper.rb中将其加载
spec_helper.rb
RSpec.configure do |config|
.....
config.before(:all) do
DatabaseCleaner.start
# execute seed.rb
load File.expand_path("db/seeds.rb", Rails.root)
end
.....
end
介绍两种调用方式:
第一种:
factory :user do
name "xxx"
trait :admin do
after(:build) {|u| u.roles << Role.find_by_name("admin") }
end
end
//测试中创建admin角色的user
create :user, :admin
另外一种:
factory :user do
name "xxx"
trait :admin do
after(:build) {|u| u.roles << Role.find_by_name("admin") }
end
factory :admin, traits: [:admin]
end
//测试中创建admin角色的user
create :admin
Traits 允许你组合属性,然后将它们应用到任何 factory 中。
1.2直接构建 many-to-many
上面的方法有些讨巧,实际上这个就是要解决如何通过 factory-girl 去构建 many-to-many 的关系
factory :user do
name "xxx"
factory :admin_user do
roles {[ create(:admin_role) ]}
end
factory :member_user do
roles {[ create(:member_role) ]}
end
end
factory :role do
factory :admin_role do
name "admin"
end
factory :member_role do
name "member"
end
end
//测试中创建admin角色的user
create :admin_user
2.has-many
factory :article do
body "article body"
factory :article_with_comment do
after(:create) do |article|
create(:comment, article: article)
end
end
end
factory :comment do
body "Great article!"
end
// 调用
article = create(:article_with_comment)
更多的比如多态之类的关系可以参考Factory Girl callbacks
3.补充
定义角色还有种更常见的方式,就是通过 Role Based Authorization 这样去定义用户角色的,可以这么处理
FactoryGirl.define do
factory :user do
name "xxx"
.....
# create role user for all roles
#
# trait :admin do
# roles ["admin"]
# end
#
# factory :admin_user, :traits => [:admin]
User::ROLES.each do |r|
trait r do
roles r
end
factory "#{r}_user", :traits => [r]
end
end
end
调用时直接这样来:
create :admin_user
这里直接拷贝过来的,就不在另外排版了。
标签:
相关推荐:
最新新闻:
- 世界热门:如何打开pdg文件?手把手教你打开PDG文件
- golang-java-serializer序列化算法解析|当前热文
- 【python】Python中最常用的数据类型|播资讯
- 如何通过factory-girl去定义测试数据中的用户角色?
- 启发式搜索算法解决八数码问题(C语言)珍藏版:每日简讯
- 【爬取红岭创投】存储在mysql数据库中的无头模式 当前速讯
- bot短期密集访问形成的流量高峰有哪些?如何解决?|天天微资讯
- seo入门知识有哪些?seo入门需掌握的基础知识
- 茅台推出酒瓶装冰淇淋酷似飞天茅台:66元一瓶:热资讯
- 【剑灵力士】新版本力士职业天赋加点推荐 备战不删档-焦点
- 《寓言之地》将于4月13日在Steam开启抢先体验测试
- 【scrapy框架】scrapy框架糗事百科爬虫案例分享 世界快资讯
- 环球关注:外媒称网易暴雪分手 是因为网易“威胁”了科蒂克
- web服务器是什么?web服务器的概念与类型
- 躲过15次GC之后 进入老年代系统有哪些规则?|天天最资讯
- 环球快报:十二届省委第二轮巡视完成反馈
- 理想汽车雷达在无人陵园显示全是人影 官方回应_每日视点
- 央企专业化整合精准提速-世界热资讯
- 全球快看点丨《最后的生还者》PC版更新仍未解决卡顿等问题
- 环球观点:《GT赛车7》今日更新免费追加丰田豪华MPV
- MINISFORUM NAB6迷你主机上架:i7-12650H准系统低至2599元:天天热议
- 松下极简电吹风159元:天天快资讯
- 迪斯尼取缔元宇宙部门
- 资讯:Curved Lines展览征集稿件
- 固态PCIe转接卡5.9元
- 《霍格沃茨之遗》成为2023年2月北美最畅销电子游戏_世界快看点
- 天天热点评!PS+欧美服4月会免游戏公布 《麻布仔大冒险》等
- 新一代高贵“亮机卡”!RTX 4050被曝6月发布:弱得不像话 动态焦点
- 怎样去除甲醛最好_怎样去除甲醛最有效
- PC《最后生还者:第一部》4080 4K帧率测试 DLSS效果出色
- 接手机宾得望远镜889元_天天报资讯
- Steam明年不再支持Win7、8!
- 透视上市券商年报:两融业务不乏亮点 仍需多维度补短板:每日热文
- 广宇发展:2022年营收34亿元,净利6.33亿元 | 年报快讯
- 环球今日报丨TGA红灵入侵少年再出现:送给甲亢哥梅西签名球衣
- 斯坦福大学医院外科医生培训 白男占比0%引争议
- 玲娜贝儿设计师遭裁员:已经累计为迪士尼公司工作22年-焦点快报
- 《地平线:西之绝境》DLC“燃烧海岸”新截图公开-今日最新
- 世界视讯!超过90%会员表示:如果没有XGP就不会尝试在玩的游戏
- 每日热点:有学历如何去澳大利亚工作_办理澳大利亚工作签证需要什么条件
- 《塞尔达传说:王国之泪》武器融合系统《蟹蟹寻宝奇遇》早有了:别说我抄袭|世界即时
- 世界热资讯!《TLOUP1》PC版首日峰值36496人 位列PS游戏第四
- 小米13 Ultra定档:4月中旬发布 世界热议
- 股票行情快报:中色股份(000758)3月29日主力资金净卖出2901.96万元
- 引领个人PC新风尚 “定番”款笔记本电脑VAIO F14·F16在日本上市 全球快报
- 【新视野】2499 元,影驰 PCIe 5.0 高速固态硬盘发布,速度可达 10G/s
- 42岁法国女星伊娃·格林新写真 贴身长裙大秀好身材 速讯
- 环球短讯!360版ChatGPT要来了!周鸿祎:大家给起个名字
- 白客坦言:"王大锤"后 导演看中了我的朴实和普通_当前速看
- 传《巫师:天狼星》是日本背景 目标是在东方推广巫师
- 传《巫师:天狼星》是日本背景 目标是在东方推广巫师
- 《龙之陨落》上架steam年内发售 爽快3D动作RPG 焦点短讯
- 环球短讯!360版ChatGPT要来了!周鸿祎:大家给起个名字
- 前《寂静岭》编剧:《寂静岭2:重制版》将让玩家失望
- 【快播报】安桥cmx1听感(安桥cmx1)
- 全球观天下!零售商上架新PS5主机 简介或暗示PS5Slim即将推出
- 快看:顽皮狗发布公告 阐述PC《最后生还者:第一部》已知问题
- 英特尔汇排流技术 助烽火超微Xeon服务器竞争力提升
- 热点在线丨追觅科技推动《电吹风》标准制定,引领行业进入规范化发展新时代
- 大咖齐聚 中国AIGC创新发展论坛将开幕 百度万兴科技科大讯飞等受邀参会
- 天天实时:人工智能时代已经到来——探索设计师的角色转变
- 诺基亚官宣:今年把4G网络带到月球_今热点
- 全球观点:123搜狗浏览器_123sogou
- 男子陵园祭祖车雷达显示全是人 网友:啥车?我想试试
- 天天即时:IGN《法外枭雄》13分钟实机:多位好莱坞影星登场!
- 金钱不是万能的辩论赛_金钱不是万能的辩论:世界球精选
- 苏宁易购预售红米Note12,线上预定送碎屏险
- Note 12 Turbo屏幕与天马深度共研,风车像素排列
- 装机神条!16GB DDR4 3200MHz内存低至185元:每日时讯
- 天天简讯:集成灶十大品牌帅丰电器持续深入终端,助力全国帅丰集成灶门店
- 全球热议:跌跌不休,内存还将继续降价,至少再打 9 折
- 2023育碧前瞻会再度归来!6.13洛杉矶现场直播
- 《王国之泪》限定NS OLED开箱:金绿符文神秘感拉满
- 活到老打到老 《师父》steam首发优惠立减10%
- 云南思茅:夯实自治“小支点” 撬动社区“大治理”:世界观热点
- 一加11木星岩版发布:纹理独一无二 聚看点
- 不会录屏?Siri可以帮你实现了:热推荐
- 世界微资讯!海信电视亮相上海张园,与《家居廊》共探家居艺术新边界
- E Ink元太科技与Sharp合作推出零功耗*电子纸数字海报|世界热点
- 年轻人为什么不喜欢买iPhone了?_今头条
- [路演]青矩技术:工程管理科技服务系提升建筑业信息化和数字化水平主要手段 拥有较大发展空间
- 热头条丨顽皮狗承诺:未来将继续支持PC玩家
- 热资讯!曝《巫师天狼星》是日本背景 为扩大IP在东方影响力
- 当前最新:DDR5价格崩了!16GB内存低至339元
- 焦点短讯!推动可信数据自由流动 浪潮数据云业务战略正式发布