【问题标题】:How to stub methods of global variables with rspec?如何使用 rspec 存根全局变量的方法?
【发布时间】:2014-08-20 06:37:02
【问题描述】:

我有一个 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

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

谢谢!

【问题讨论】:

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


    【解决方案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
    

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

    例如,见rspec documentation

    【讨论】:

    • 谢谢!这证明在凌晨 3 点编写代码并不是最佳实践:)
    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多