【问题标题】:test for models that points itself rspec rails 5测试指向自身的模型 rspec rails 5
【发布时间】:2019-07-12 05:01:26
【问题描述】:

我是在 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) 用户应验证关联应属于 失败/错误:它 { 应该属于_to(subject.created_by) } 预期用户有一个名为 belongs_to 的关联(无关联 > 称为) # ./spec/models/user_spec.rb:17:in `block (3 levels) in '

【问题讨论】:

  • 我只想在下面的答案中补充一点,测试这种关系没有太大价值,因为不涉及真正的逻辑。您只是添加了一些框架便利方法。测试不会造成任何伤害,但也不会真正给您带来太多好处。

标签: ruby-on-rails ruby rspec


【解决方案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

中有很好的记录

【讨论】:

    【解决方案2】:

    您给 matcher 一个实例,但它等待引用名称和引用的类名称。您的测试应该如下所示。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多