Search code examples
ruby-on-railsrspecrackmiddleware

Testing Rack Middleware in Rspec wrong number of arguments (2 for 0)


I'm trying to test some Middleware I've written in a Rails app, and I'm coming up with the following error when I try running my test stack:

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

Here's my middleware:

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

And here's my tests:

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

Where am I going wrong?


Solution

  • missing comma after app? AngerFist.new(app, "UA-xxxxxxx-x", "http://test.domain")