Ruby on rails 如何测试插入与规格有多大关系?

Ruby on rails 如何测试插入与规格有多大关系?,ruby-on-rails,rspec,Ruby On Rails,Rspec,我在一个页面中插入一个用户(一个页面通过memberships表有许多用户),我希望它会失败,因为需要一个角色。我已验证成员资格(联接表)上用户、页面和角色的存在 我的问题是测试在结束之前中断,因为抛出了异常。所以我想,我会给它加上一个“期望加薪” it 'should not be valid without a role' do user = FactoryGirl.build(:user) expect { page.users << user }.to raise_e

我在一个页面中插入一个用户(一个页面通过memberships表有许多用户),我希望它会失败,因为需要一个角色。我已验证成员资格(联接表)上用户、页面和角色的存在

我的问题是测试在结束之前中断,因为抛出了异常。所以我想,我会给它加上一个“期望加薪”

it 'should not be valid without a role' do
  user = FactoryGirl.build(:user)
  expect { page.users << user }.to raise_error(ActiveRecord::RecordInvalid)
end
如果没有角色,它“应该无效”do
user=FactoryGirl.build(:user)
除了{page.users之外,您应该检查gem

您还可以尝试使用以下语法:

it { should have(1).error_on :role }

基本上,您可以访问规范中的错误,并可以检查字段中是否有您想要的错误。

我已经这样做了,并添加了一个validate\u university\u,但因为我直接在页面中插入用户并保存它(page.users它永远不会到达那一行,因为page.users模型上没有什么特别的东西:验证:user的存在性,:role,:page验证:user\id的唯一性,:scope=>[:page\u id],消息:“已经拥有此页面的权限”请告诉我们
页面
也是什么
it 'should not be valid without a role' do
  user = FactoryGirl.build(:user)
  expect { page.users << user }.to raise_error(ActiveRecord::RecordInvalid, /Role must be provided/)
end    
it { should have(1).error_on :role }