Ruby on rails 如何在Ruby和rspec中处理具有潜在Nil类的存根新方法
我有一种情况,我存根了一个类的.new方法,但这使得它返回nil对象,以后需要这些对象,我不知道如何处理它。这是我的rspec代码:Ruby on rails 如何在Ruby和rspec中处理具有潜在Nil类的存根新方法,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我有一种情况,我存根了一个类的.new方法,但这使得它返回nil对象,以后需要这些对象,我不知道如何处理它。这是我的rspec代码: describe ShopWorker do describe '#perform' do let(:worker) { ShopWorker.new } it 'creates a new instance of Shopper' do user = FactoryGirl.create(:user) expect(S
describe ShopWorker do
describe '#perform' do
let(:worker) { ShopWorker.new }
it 'creates a new instance of Shopper' do
user = FactoryGirl.create(:user)
expect(Shopper).to receive(:new).with(user)
worker.perform(user.id)
end
end
end
这是我的员工代码:
class ShopWorker
include Sidekiq::Worker
def perform(user_id)
user = User.find(user_id)
shopper = Shopper.new(user)
shopper.start # This fails because Shopper.new returns NIL
end
end
因此,由于我正在使用
expect(Shopper).to receive(:new).with(user)
对新方法进行存根,因此当在worker中执行Shopper.start时,它为零,因此它会中断。我应该如何解决这个问题?理想情况下,我想测试Shopper的一个新实例是否完成,以及是否为该实例调用了方法start。您可以做以下几件事:
:新的,但使用和_return()
提供返回值(可能是模拟值)。问题是,除非显式提供返回值,否则接收的具有隐式和返回(nil)
:new
,让它完成它的工作,并期望:在任何购物者上启动,实例:期望(购物者)的任何实例。接收(:start)
购物者启动的影响是什么?你能断言关于实际业务价值的任何东西吗
第三点很好。这个测试只是试图找出工作人员实际实例化了一个对象(实际上是谁完成了所有的工作,我在另一部分中对此进行了测试)。