RSpec - освежающие ассоциации - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть LabCollection:

class LabCollection < ApplicationRecord
  # Relationships
  belongs_to :lab_container, polymorphic: true, optional: true
  has_many :lab_collection_labs
  has_many :labs, -> { published }, through: :lab_collection_labs
  has_many :lab_collection_inclusions, dependent: :destroy
end

У него есть много LabCollectionLabs:

class LabCollectionLab < ApplicationRecord
  acts_as_list scope: :lab_collection_id, add_new_at: :bottom
  belongs_to :lab_collection
  belongs_to :lab
end

, который имеет идентификатор лаборатории и принадлежит лаборатории.

У меня естьспецификация, которая проверяет, как создаются новые ассоциации, и она не работает в следующем пункте:

context 'when the lab container has labs already present' do
        it 'removes the present labs and adds the new ones' do
          subject = RawLabAdder
          expect(populated_lab_collection.labs).to eq labs
          subject.new(populated_lab_collection, [lab4.id, lab5.id]).perform
          expect(populated_lab_collection.labs).not_to eq labs
          binding.pry
          expect(populated_lab_collection.labs).to eq [lab4, lab5]
        end
      end

Если вам нужно увидеть внутреннюю работу кода, дайте мне знать, однако проблема, похоже, связана с RSpecи освежающие ассоциации.Когда я нажимаю точку привязкиlab_id и что лаборатория существует для этих идентификаторов.Я полагаю, что моя проблема в том, что я не обновляю записи правильно, однако я попытался:

      # populated_lab_collection.reload
      # populated_lab_collection.lab_collection_labs.reload
      # populated_lab_collection.lab_collection_labs.each do |x|
      #   x.lab.reload
      # end
      # populated_lab_collection.labs.reload

Любой совет о том, как я могу заставить RSpec правильно читать в вложенных записях ассоциациях, очень ценится.Как я уже сказал, когда я проверяю запись, у нее есть 2 lab_inclusion_labs, у каждого из которых есть лаборатория, однако у родительской записи явно нет лабораторных работ.

РЕДАКТИРОВАТЬ: класс RawLabAdder:

module LabCollections
  class RawLabAdder

    def initialize(incoming_lab_collection, lab_ids = [])
      @lab_ids = lab_ids
      @lab_collection = incoming_lab_collection
    end

    def perform
      remove_associated_labs
      add_labs
    end

    private

    def add_labs
      @lab_ids.each do |x|
        lab = Lab.find(x)
        LabCollectionInclusionAdder.new(@lab_collection, lab).perform
      end
    end

    def remove_associated_labs
      @lab_collection.lab_collection_inclusions.map(&:destroy)
      @lab_collection.lab_collection_labs.map(&:destroy)
    end
  end
end

1 Ответ

0 голосов
/ 14 ноября 2018

Если вы создаете экземпляр в хуке before или в спецификации, а затем выполняете над ним какую-либо работу с базой данных, то у вашего экземпляра больше не будет ссылаться на актуальную информацию.

Попробуйте перезагрузить коллекцию populated_lab_collection перед подтверждением.

expect(populated_lab_collection.reload.labs).not_to eq labs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...