rspec 'allow' 存根未设置变量
rspec 'allow' stub isn't setting variables
我有控制器功能:
def update
@simulation = Simulation.find(params[:id])
@simulation.next
puts "--"
puts @simulation.dirty?
puts @simulation.save
if (@simulation.save && @simulation.dirty?)
render :partial => 'show', :object => @simulation
end
end
还有一个 rspec 测试:
it "should render a partial when the record is dirty" do
allow(@simulation).to receive('dirty?') { true }
put :update, :id => @simulation.id, :format => 'js'
expect(response).to render_template( :partial => 'show' )
end
测试无法呈现视图,因为 if 检查未通过,因为它不会 return @simulation#dirty 为真?即使该功能已存根。由于控制器中的放置,我可以看到这一点。任何想法为什么它不起作用?
您存根的实例变量 @simulation
不属于控制器实例,而是属于 rspec 测试用例 class 实例。在允许方法调用之后,在 rspec 块中尝试 @simulation.dirty?
。我猜 returns 是真的。但是,控制器中的 @simulation
没有存根。它们是两个不同的对象。
如果你想在控制器的更新方法中存根 @simulation
,你应该存根模拟的所有实例 class。尝试使用 allow_any_instance_of 而不是 allow(@simulation
).
allow_any_instance_of(Simulation).to receive(:dirty?).and_return(true)
https://github.com/rspec/rspec-mocks#settings-mocks-or-stubs-on-any-instance-of-a-class
我有控制器功能:
def update
@simulation = Simulation.find(params[:id])
@simulation.next
puts "--"
puts @simulation.dirty?
puts @simulation.save
if (@simulation.save && @simulation.dirty?)
render :partial => 'show', :object => @simulation
end
end
还有一个 rspec 测试:
it "should render a partial when the record is dirty" do
allow(@simulation).to receive('dirty?') { true }
put :update, :id => @simulation.id, :format => 'js'
expect(response).to render_template( :partial => 'show' )
end
测试无法呈现视图,因为 if 检查未通过,因为它不会 return @simulation#dirty 为真?即使该功能已存根。由于控制器中的放置,我可以看到这一点。任何想法为什么它不起作用?
您存根的实例变量 @simulation
不属于控制器实例,而是属于 rspec 测试用例 class 实例。在允许方法调用之后,在 rspec 块中尝试 @simulation.dirty?
。我猜 returns 是真的。但是,控制器中的 @simulation
没有存根。它们是两个不同的对象。
如果你想在控制器的更新方法中存根 @simulation
,你应该存根模拟的所有实例 class。尝试使用 allow_any_instance_of 而不是 allow(@simulation
).
allow_any_instance_of(Simulation).to receive(:dirty?).and_return(true)
https://github.com/rspec/rspec-mocks#settings-mocks-or-stubs-on-any-instance-of-a-class