如何测试与规范插入has_many关系?

时间:2013-07-09 07:25:19

标签: ruby-on-rails rspec

我在页面中插入用户(页面中有许多用户通过成员资格表),我希望它因为需要角色而失败。我对成员资格(联接表)上的用户,页面和角色都有validate_presence_of。

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

it 'should not be valid without a role' do
  user = FactoryGirl.build(:user)
  expect { page.users << user }.to raise_error(ActiveRecord::RecordInvalid)
end

但这并没有真正测试,错误是由缺少角色(验证错误:没有提供角色)引起的。有没有更好的方法来测试这个?或者有没有办法在page.users中设置用户而不保存它,然后检查页面是否有效?

更新

这也不起作用(在页面上抛出异常。用户&lt;&lt;用户,无效的活动记录,必须提供角色):

it 'should not be valid without a role' do
  user = FactoryGirl.build(:user)
  page.users << user
  page.should have(1).error_on :role
end

更新2:

我想我有答案,现在适用

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    

1 个答案:

答案 0 :(得分:1)

你应该检查Shoulda-matchers gem。

您也可以尝试使用语法:

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

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