【发布时间】:2021-04-25 14:50:53
【问题描述】:
我想学习如何使用存根。
class SomeClass
attr_reader :current_user
def initialize(current_user:)
@current_user = current_user
end
def deliver
subscribers.each do |user|
DailyEmail.new(recipient: user).deliver
end
201
end
private
def subscribers
User.all.select(&:email_notifications_enabled?)
end
end
测试 DailyEmail 新的交付方法的正确方法是什么,这些方法是从 SomeClass 调用的。如果订阅者是 activerecord 关系,我如何测试每种方法? 我如何检查迭代器后的状态返回?
我奇怪的解决方案:
RSpec.describe SomeClass do
let(:current_user) { 'user' }
subject { described_class.new(current_user: current_user) }
describe '#deliver' do
let(:subscribers) { ['test2', 'test1'] }
context 'when `each`, `new`, `deliver` methods called in controller `deliver` method' do
it 'calls methods' do
allow(subscribers).to receive(:each)
subscribers.each do |user|
the_double = instance_double(DailyEmail)
expect(DailyEmail).to receive(:new).and_return(the_double).with(recipient: user)
expect(the_double).to receive(:deliver)
expect(subscribers).to have_received(:each)
subject.deliver
end
end
end
end
end
我写了一些东西,但这个实现对我来说似乎很糟糕。我不明白如何处理迭代器以及如何测试状态。请给一些建议
【问题讨论】:
标签: ruby-on-rails ruby rspec stub