我仍在不断提高我的Ruby技能。
我一直在尝试找出是否可以将此代码干燥以进行rspec测试:
require 'rails_helper'
RSpec.describe Role, type: :model do
describe "has several roles types " do
before :each do
@roles = Role.all
end
context "The role types that are valid" do
it "includes 'proofreader', 'admin', 'super_admin' " do
expect(@roles.any?{|r| r.name == 'proofreader'}).to be_truthy
expect(@roles.any?{|r| r.name == 'admin'}).to be_truthy
expect(@roles.any?{|r| r.name == 'super_admin'}).to be_truthy
end
end
context "The role types that are not valid " do
it "includes 'developer' " do
expect(@roles.any?{|r| r.name == 'developer'}).to be_falsy
end
end
end
end
具体来说,我想将这三行代码减少为一行,但是这使我无法在一行中为三个字符串值检查ActiveRecord关系。有任何想法吗?
似乎您需要使用include
匹配器:
it "includes 'proofreader', 'admin', 'super_admin' " do
expect(@roles.map(&:name)).to include('proofreader', 'admin', 'super_admin')
end
另外,您可以删除before
块并仅使用它Role.pluck(:name)
:
let(:roles_names) { Role.pluck(:name) }
it '...' do
expect(roles_names).to include('proofreader', 'admin', 'super_admin')
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句