gpt4 book ai didi

ruby-on-rails - 测试委托(delegate)给另一个对象的方法

转载 作者:数据小太阳 更新时间:2023-10-29 08:43:01 26 4
gpt4 key购买 nike

这是我项目中的一个模型 -

class Subscription < ActiveRecord::Base
def active?
SubscriptionValidationPolicy.new(self).active?
end
end

当我对 active? 进行单元测试时,我应该为 active 和 inactive 状态设置一个 subscription 并对其断言,还是应该为 做一个 double SubscriptionValidationPolicy,以某种方式注入(inject)它,然后断言 active? 是否被调用了?

或者这只是我如何进行测试的固执己见。无论如何,我将测试 SubscriptionValidationPolicy,因此对 Subscription#active? 方法进行“基于状态”的测试感觉是多余的。

希望对此有一些想法:)

最佳答案

我同意@spickermann 我会按如下方式设置测试:

#spec/models/subscription_spec.rb
#
describe Subscription do

let(:subscription) { Subscription.new }
context '#active? delegation' do
let(:policy) {spy('subscription_validation_policy')}
before :each do
allow(SubscriptionValidationPolicy).to receive(:new).and_return(policy)
subscription.active?
end

it 'instantiates a SubscriptionValidationPolicy with self' do
expect(SubscriptionValidationPolicy).to have_received(:new).with(subscription)
end
it 'calls SubscriptionValidationPolicy#active?' do
expect(policy).to have_received(:active?)
end
end
end

然后实际测试 SubscriptionValidationPolicy#active? 以了解 SubscriptionValidationPolicy 规范中的逻辑考虑因素。

关于ruby-on-rails - 测试委托(delegate)给另一个对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46646516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com