我有一个名为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 更新建筑物属性?
答案 0 :(得分:0)
好吧,我找到了解决方案,但实际上并不优雅:
( this.renderMaxTotal() )
它有效,但在我看来,这不是正确的测试方法。不过,我找不到更好的解决方案。