如何使用rspec存根全局变量的方法?

时间:2014-08-20 06:37:03

标签: ruby-on-rails-3 rspec analytics rspec-rails

我有一个Rails项目,其中我是一个分析库,用于跟踪代码不同部分的操作。我的初始化代码如下所示:

# config/initializers/analytics.rb
Analytics = SuperAnalytics.new({
                                   api_key: '[SECRET]',
                                   on_error: Proc.new { |status, msg| print msg }
                               })

我的控制器代码如下所示:

def register
  email = params[:email]
  return unless email.present?
  Analytics.identify(
      user: email,
      parameters: {
          email: email,
      }
  )
end

我的测试代码:

context '#register' do
  it 'should create an identify tracking event' do
    get :register, email: 'test@test.com'
    response.status.should == 200
    Analytics.should_receive(:identify)
  end
end

我的测试失败了

Failure/Error: Analytics.should_receive(:identify)
   (#<SuperAnalytics:0x007f8354594ac8>).identify(any args)
       expected: 1 time
       received: 0 times

在初始化程序中初始化的全局变量的存根方法是否存在问题?我在这里错过了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你必须把期望放在开头

context '#register' do
  it 'should create an identify tracking event' do
    Analytics.should_receive(:identify)
    get :register, email: 'test@test.com'
    response.status.should == 200
  end
end

否则,您说“分析应该在执行以下代码时收到此消息”,但是没有以下代码。

例如,请参阅rspec documentation

rspec example