如何使用Ruby RSpec测试添加了观察者的类?
我的任务是这样执行的:如何使用Ruby RSpec测试添加了观察者的类?,ruby,rspec,observer-pattern,resque,Ruby,Rspec,Observer Pattern,Resque,我的任务是这样执行的: class MyTask @queue = :queue_name include BaseTask end module BaseTask include Observable def perform add_observer(MyObserver.new) ... changed notify_observers end end 我有一个Resque任务,使用p
class MyTask
@queue = :queue_name
include BaseTask
end
module BaseTask
include Observable
def perform
add_observer(MyObserver.new)
...
changed
notify_observers
end
end
我有一个Resque任务,
使用perform
方法调用add\u observer
,changed
和notify\u observer
,包括Observable
。如何使用RSpec
测试BaseTask
?我初始化了MyTask
并调用了task.perform
。我尝试了可观察。是否应该接收(:添加观察者)
,MyTask。任何实例。是否应该接收(:添加观察者)
,BaseTask。是否应该接收(:添加观察者)
,但它们不工作?您应该能够检查MyTask
实例上的消息期望值。
比如说,
it "is observable" do
task = MyTask.new
task.should_receive :add_observer
task.should_receive :changed
task.should_receive :notify_observers
task.perform
end
理想情况下,我不会这样做,因为对测试对象有很多消息期望。相反,我可能会检查一些调用perform
后产生的外部状态
编辑
如果您想在MyObserver
上检查实例方法,可以在调用perform
之前执行以下操作:
observer = mock
MyObserver.stub(:new).and_return(observer)
observer.should_receive(:some_method) #replace `some_method` with whatever instance method you want
如何测试使用
:update
调用MyObserver
?我添加了MyObserver.any\u实例。应该在任务之前接收(:update)
。执行
,但它说没有调用update
。但我知道这是因为将放入更新中正在执行。我更新了答案,以显示检查MyObserver
的示例。