如何在没有递归堆栈溢出错误的情况下RSpec测试关联存在?

时间:2013-05-26 03:43:58

标签: ruby-on-rails testing rspec factory-bot

我有一个Divisions模型和一个Scorable模型,它们的关联如下:

class Division < ActiveRecord::Base
  has_one :scoring, :as => :scorable

  validates :name, :presence => true
  validates :scoring, :presence => true
end

class Scoring < ActiveRecord::Base
  belongs_to :scorable, polymorphic: true

  validates :scorable, :presence => true
end

如何在这些模型上测试验证?如果每个工厂的工厂都包含对彼此的引用,我会得到堆栈溢出。但是,如果我按照以下方式制作工厂,那么当我测试时,我得到一个Scorable不能出现空白错误(显然):

FactoryGirl.define do
  factory :division do
    name "Division"
    organisation
    association :scoring, factory: :scoring
end

FactoryGirl.define do
  factory :scoring do
    first 12
    second 10
    third 8
    scorable nil
  end
end

如何测试两种模型中关联的存在?

1 个答案:

答案 0 :(得分:0)

你的模特错了。在scoring模型中验证Division的存在是不可能的。

Division位于has_one方,其表中没有此类字段。只有Scoring模型的表格会有额外的字段scorable_idscorable_type

Division中删除该验证,您的所有代码都可以。