KonifarPod

RspecでObserverの監視を一時的に切る方法

   

Pocket

RspecでObserverで監視されたテストを行う際、Observerが行う処理によってテストがうまく通らないことがあります。

そんな時、stubを使って一時的にObserverの監視を一時的に切ってテストする方法です。

[Model]

class User < ActiveRecord::Base
end

 

[Observer]

class UserObserver < ActiveRecord::Observer
  def after_create(object)
    # 何か処理
  end
end

 

<>[Spec]

require 'spec_helper'
describe User do
  describe ".create" do
    before do
      # Turn off the observer
      UserObserver.instance.stub(:after_create => true)
    end
  end
end

 

Userのcreateを監視するObserverがある場合、specのbeforeブロック内でafter_createをstubしています。

UserObserver.instance.stub(:after_create => true)

こう書くとObserverはただtrueを返すだけになるので、Observerの結果に左右されず純粋にModelのテストだけを行うことができます。

Pocket

 - Develop ,