Как вы уже упоминали, для работы должно быть включено кэширование в среде. Если он отключен, мой пример ниже не удастся. Вероятно, это хорошая идея, чтобы временно включить это во время выполнения для ваших характеристик кэширования.
after_save - это метод экземпляра. Вы устанавливаете ожидание для метода класса, вот почему он не работает.
Ниже приведен лучший способ установить это ожидание:
it "should clear the cache" do
@foo = Foo.new(@create_params)
Foo.should_receive(:new).with(@create_params).and_return(@foo)
foo_sweeper = mock('FooSweeper')
foo_sweeper.stub!(:update)
foo_sweeper.should_receive(:update).with(:after_save, @foo)
Foo.instance_variable_set(:@observer_peers, [foo_sweeper])
post :create, @create_params
end
Проблема в том, что наблюдатели Foo (свиперы являются подклассом наблюдателей) устанавливаются при загрузке Rails, поэтому мы должны вставить наш макет свипера непосредственно в модель с помощью instance_variable_set.