你如何存根/期望state_machine事件?

时间:2012-06-04 15:52:10

标签: ruby-on-rails ruby rspec state-machine

我想做这样的事情:

@vehicle.should_receive(:park)
@vehicle.stub!(:park)
Vehicle.any_instance.stub(:park)
# etc.

这样我就可以验证交互或在其他规范中使用state_machine,而无需实际更改状态的开销......

我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

使用您撰写的上述任何方法。请注意,我认为在某些版本的Rspec中,直接存根或使用#should_receive将替换所述存根方法的主体。如果您以后测试副作用,它们将不会出现。

通常我会解决这个问题。

@vehicle.should_receive(:park) do
   @vehicle.state = :parked
end

expect do
  @person.exit_vehicle
end.should change(@vehicle.state).from(:driving).to(:parked)