测试指向自身的模型rspec rails 5

时间:2019-02-18 18:47:04

标签: ruby-on-rails ruby rspec

我是在Ruby on Rails中进行单元测试的新手,因此在测试中需要一些帮助。

这是我的模型User.rb

class User < ApplicationRecord
  belongs_to :created_by, foreign_key: :created_by_id, class_name: 'User'
end

我想创建一个测试来验证此关联。我尝试在user_spec.rb

上执行此操作
describe 'should validates associations' do
  subject { User.new }
  it { should belong_to(subject.created_by) }
end

这是错误响应

  

失败:

     

1)用户应验证关联应属于       失败/错误:它{应该属于(subject.created_by)}         预期用户具有一个名为的belongs_to关联(没有关联>被调用)       #./spec/models/user_spec.rb:17:在'

中的“块(3个级别)”中

2 个答案:

答案 0 :(得分:1)

ActiveRecord shoulda matchers不需要实例化该类的任何对象即可运行测试。在这里,您已经初始化了一个新的User实例作为主题,并尝试将其传递给Shoulda匹配器以检查belongs_to关联。
但是,为了检查具有特定外键和类名称的模型上的belongs_to关联,可以使用以下测试:

it { should belong_to(:created_by).with_foreign_key(:created_by_id).class_name('User') }

ActiveRecord匹配器除了上面提到的两个以外,还有很多其他选择。这些选项在Shoulda code on GitHub

中有很好的说明。

答案 1 :(得分:0)

您为匹配器提供了一个实例,但它等待引用名称和引用的类名称。您的测试应如下所示。

it { should belong_to(:created_by).of_type(User) }