Rails Полиморфная Ассоциация ноль в модульных тестах - PullRequest
0 голосов
/ 24 октября 2019

Я работаю над приложением Rails 6, и в модульном тестировании полиморфной ассоциации с использованием Minitest я не могу понять, почему мой модульный тест видит ассоциацию в одном направлении, но nil в другом направлении,Вот суть моего кода (сокращенно для ясности):

Модели

entry.rb

class Entry < ApplicationRecord
  has_one :rich_text, as: :record, dependent: :destroy

  validates_presence_of :rich_text
  validates_associated :rich_text
end

rich_text.rb

class RichText < ApplicationRecord
  belongs_to :record, polymorphic: true
  validates :record_id, uniqueness: { scope: [:record_type, :record_id] }
  validates :body_raw, presence: true
end

Светильники

entry.yml

entry_1:
  title: Here is an entry title
  slug: here-is-a-entry-title

rich_texts.yml

rich_text_1:
  record:   entry_1 (Entry)
  body_raw: "<%= Faker::Markdown.sandwich(sentences: 5) %>"

Тест модели

class EntryTest < ActiveSupport::TestCase
  def setup
    @entry     = entries(:entry_1)
    @rich_text = rich_texts(:rich_text_1)

  end

  test "entry should be valid" do
    assert @entry.valid? # This fails because @entry.rich_text is nil
  end
end

Теперь в этом тесте выше, @entry.valid?false, потому что @entry.rich_text оценивается как nil. Поэтому он не проходит валидацию ассоциации.

Для получения дополнительной информации об этом тесте я заметил следующее в тесте:

  • @entry.rich_text равно nil
  • @rich_text.record - это Entry. Не только это, но ...
  • @rich_text.record_id == @entry.id, что означает, что ...
  • @rich_text.record == @entry равно true!

Если этоВ этом случае, почему бы тесту было известно об ассоциации между двумя моделями в одном направлении, но не учитывать ее с другой стороны?

...