0

我的任务是这样实现的:

class MyTask
    @queue = :queue_name
    include BaseTask
end

module BaseTask
    include Observable
    def perform
        add_observer(MyObserver.new)
        ...
        changed
        notify_observers
    end
end

我有一个 Resque 任务,它include Observable使用perform方法调用add_observer,changednotify_observers. BaseTask我该如何测试RSpec?我初始化MyTask并调用了task.perform. 我试过了,,,,但Observable.should_receive(:add_observer)他们不工作?MyTask.any_instance.should_receive(:add_observer)BaseTask.should_receive(:add_observer)

4

1 回答 1

1

您应该能够检查. 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
于 2013-11-05T15:02:18.857 回答