我是在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个级别)”中
答案 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) }