在Rspec中测试机架中间件错误的参数数量(2为0)

时间:2015-01-09 12:04:46

标签: ruby-on-rails rspec rack middleware

我正在尝试测试一些我在Rails应用程序中编写的中间件,当我尝试运行我的测试堆栈时,我想出现以下错误:

Failure/Error: let(:middleware) { AngerFist.new(app "UA-xxxxxxx-x", "http://test.domain") }
    ArgumentError:
      wrong number of arguments (2 for 0)

这是我的中间件:

class AngerFist
  include Rack::Utils

  def initialize(app, tracker_id, domain)
    @app = app
    @gabba = Gabba::Gabba.new(tracker_id, domain)
  end

  def call(env)
    status, headers, response = @app.call(env)

    headers = HeaderHash.new(headers)

    if headers.key?('Content-Type') && headers['Content-Type'].include?('application/json')
      @gabba.page_view(env['PATH_INFO'], env['PATH_INFO'])
    end

    [status, headers, response]
  end

end

这是我的测试:

require 'spec_helper'
require 'rack'
require 'gabba'
require 'angerfist'

describe AngerFist do
  let(:app) { proc{[200,{},['Hello, world.']]} }
  let(:middleware) { AngerFist.new(app "UA-xxxxxxx-x", "http://test.domain") }
  let(:request) { Rack::MockRequest.new(middleware) }

  it "tracks a page view for JSON" do
    expect_any_instance_of(Gabba::Gabba).to receive(:page_view)
    request.get('addresses/address.json')
  end

end

我哪里错了?

1 个答案:

答案 0 :(得分:2)

应用程序后缺少逗号? AngerFist.new(app, "UA-xxxxxxx-x", "http://test.domain")