RSpec在factory_bot对象中看不到更新的属性

时间:2019-04-24 10:27:03

标签: ruby-on-rails ruby-on-rails-5

我有一个名为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 ==)

我用 进行了检查,并且 warrior 对象有效,即使 building.warriors 也返回战士,但在属性中战士的数量仍为0。当我在控制台中手动键入时,该示例也适用。如何在测试前使 RSpec 更新建筑物属性?

1 个答案:

答案 0 :(得分:0)

好吧,我找到了解决方案,但实际上并不优雅:

( this.renderMaxTotal() )

它有效,但在我看来,这不是正确的测试方法。不过,我找不到更好的解决方案。