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

问题描述 投票:0回答:1

我有一个名为SiegeReport的报表对象,它进行一些计算并返回整数对象。当构建中没有warrior时,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和warrior对象检查它是有效的,甚至building.warriors返回warrior,但在属性中,warriors的数量仍为0.当我在控制台中手动输入时,同样的例子也有效。如何在测试之前使RSpec更新构建属性?

ruby-on-rails ruby-on-rails-5
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.