RSpec не видит обновленные атрибуты в объекте factory_bot - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть объект отчета с именем SiegeReport, который выполняет некоторые вычисления и возвращает целочисленный объект. Когда в здании нет воина , тогда siege_ability равно 0. Сам код здесь не важен, потому что он отлично работает в консоли и в приложении. Заводы, изготовленные factory_bot , работают нормально во всех других примерах. У меня просто проблема с тестированием метода:

require 'rails_helper'

RSpec.describe Reports::SiegeReport do
  subject(:siege_report) { Reports::SiegeReport.new(building:    building).call }

  let(:building) { create(:building, granary: 100) }
  let(:clan) { create(:clan) }

    context 'with 1 infantry' do
      let(:warrior) { create(:warrior, clan_id: clan.id, building_id: building.id) }

      it 'returns 9' do
        expect(siege_report).to eq(9)
      end
    end
  end

RSpec возвращает:

Reports::SiegeReport siege ability with 1 infantry returns 9
      Failure/Error: expect(siege_report).to eq(9)

        expected: 9
            got: 0

        (compared using ==)

Я проверил это с помощью pry и воин объект действителен, даже building.warriors возвращает воин, но в атрибутах число воинов по-прежнему равно 0. Тот же самый пример работает, когда я набираю его вручную в консоли. Как я могу RSpec обновить атрибуты здания перед тестированием?

1 Ответ

0 голосов
/ 24 апреля 2019

Хорошо, я нашел решение, но на самом деле не элегантно:

it 'returns 9' do
  warrior.save
  expect(siege_report).to eq(9)
end

Это работает, но мне кажется, что это не правильный способ тестирования. Тем не менее, я не могу найти лучшего решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...