Skip to content

Instantly share code, notes, and snippets.

@blackxored
Created November 20, 2012 01:05
Show Gist options
  • Save blackxored/4115275 to your computer and use it in GitHub Desktop.
Save blackxored/4115275 to your computer and use it in GitHub Desktop.
RSpec::Rails, Capybara, Rack::Test errors on last_response
# ./spec/support/api/helper.rb
module ApiHelper
include Rack::Test::Methods
def app
Rails.application
end
end
RSpec.configure do |c|
c.include ApiHelper, :type => :api
end
module ApiHelper
def self.included(base)
base.__send__(:include, Rack::Test::Methods)
end
def app
Rails.application
end
end
RSpec.configure do |c|
c.include ApiHelper, :type => :api
end
Failures:
1) /api/v0/projects list of projects returns a JSON array of projects scoped by this user
Failure/Error: expect(last_response.status).to eq(200)
NameError:
undefined local variable or method `last_response' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0xd219348>
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-expectations-2.12.0/lib/rspec/matchers/method_missing.rb:9:in `method_missing'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/actionpack-3.2.9/lib/action_dispatch/testing/assertions/routing.rb:176:in `method_missing'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/actionpack-3.2.9/lib/action_dispatch/testing/integration.rb:386:in `method_missing'
# ./spec/apis/v0/projects_spec.rb:19:in `block (3 levels) in <top (required)>'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/example.rb:114:in `instance_eval'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/example.rb:114:in `block in run'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/example.rb:254:in `with_around_each_hooks'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/example.rb:111:in `run'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/example_group.rb:388:in `block in run_examples'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/example_group.rb:384:in `map'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/example_group.rb:384:in `run_examples'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/example_group.rb:369:in `run'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/example_group.rb:370:in `block in run'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/example_group.rb:370:in `map'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/example_group.rb:370:in `run'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/command_line.rb:28:in `block (2 levels) in run'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/command_line.rb:28:in `map'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/command_line.rb:28:in `block in run'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/reporter.rb:34:in `report'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/command_line.rb:25:in `run'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/runner.rb:66:in `rescue in run'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/runner.rb:62:in `run'
# /home/adrian/.rvm/gems/ruby-1.9.3-p286-perf@searchfuse/gems/rspec-core-2.12.0/lib/rspec/core/runner.rb:8:in `block in autorun'
# ./spec/apis/v0/projects_spec.rb
require 'spec_helper'
describe "/api/v0/projects", :type => :api do
let(:user) { create_user! }
let(:token) { user.authentication_token }
before do
@project = FactoryGirl.create(:project, :name => 'FirstProj')
user.account.projects << @project
user.account.save!
end
context "list of projects" do
let(:url) { "/api/v0/projects" }
it "returns a JSON array of projects scoped by this user" do
projects_json = user.projects.to_json
get "#{url}.json", :api_token => token
expect(last_response.status).to eq(200)
projects = JSON.parse(last_response.body)['projects']
projects.any? { |p| p['name'] == 'FirstProj' }.should be
end
end
end
@blackxored
Copy link
Author

This is the simplest case, as the test is mostly a stub/safety, but it evidences the problem, I know I might just use response instead of last_response instead, but wanted to know why last_response won't work since rack-test 0.6.2 (latest), properly defines that in Rack::Test::Methods.

@Valve
Copy link

Valve commented Aug 20, 2013

Same thing for me, no last_response, but response works OK. Have you found the solution?

@JackWells
Copy link

2019 - still a problem - even if using 'response' in my case. Is there no generator which can set up all the boilerplate so it "just works"?? I'd like to spend time writing-tests, not hours trying to get the test-framework to function.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment