Ruby on rails 如何存根/预期状态机事件?

Ruby on rails 如何存根/预期状态机事件?,ruby-on-rails,ruby,rspec,state-machine,Ruby On Rails,Ruby,Rspec,State Machine,我想这样做: @vehicle.should_receive(:park) @vehicle.stub!(:park) Vehicle.any_instance.stub(:park) # etc. 这样我就可以验证交互或在其他规范中使用状态机,而不需要实际更改状态的开销 我怎样才能做到这一点呢?使用您所写的上述任何一种方法。注意,我认为在某些版本的Rspec中,直接存根或使用#should_receive将取代上述存根方法的主体。如果你以后测试副作用,它们不会出现 通常我会和你一起解决这个问

我想这样做:

@vehicle.should_receive(:park)
@vehicle.stub!(:park)
Vehicle.any_instance.stub(:park)
# etc.
这样我就可以验证交互或在其他规范中使用状态机,而不需要实际更改状态的开销


我怎样才能做到这一点呢?

使用您所写的上述任何一种方法。注意,我认为在某些版本的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)

我想你回答了你自己的问题。就像使用任何其他实例方法一样,只需存根或设置期望值。还是我们遗漏了什么?它确实有用,谢谢!原来我测试的类使用的是状态机的另一个实例,而不是我设置的期望值。。。我没有意识到。