我有一个名为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更新构建属性?
好的,我找到了解决方案,但实际上并不优雅:
it 'returns 9' do
warrior.save
expect(siege_report).to eq(9)
end
它有效,但在我看来,它不是正确的测试方式。不过,我找不到更好的解决方案。