Peter Ehrlich
2011-Feb-06 06:18 UTC
[rspec-users] Controller Testing + Devise = boom (undefined @controller, request)
Here I am, trying to learn TDD and BDD. Getting start, most simple
case, and the world is falling apart:
My test code:
it "should respond with success" do
puts ''hi''
# get :new
# response.should be_success
end
My stack trace:
$ rspec spec
"controller: nil"
F
Failures:
1) VideosController new exposes request and response before and after
the action
Failure/Error: Unable to find matching line from backtrace
NoMethodError:
undefined method `request'' for nil:NilClass
#
/Users/peter/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.3/lib/active_support/whiny_nil.rb:48:in
`method_missing''
#
/Users/peter/.rvm/gems/ruby-1.9.2-p136/gems/devise-1.1.5/lib/devise/test_helpers.rb:20:in
`initialize''
#
/Users/peter/.rvm/gems/ruby-1.9.2-p136/gems/devise-1.1.5/lib/devise/test_helpers.rb:60:in
`new''
#
/Users/peter/.rvm/gems/ruby-1.9.2-p136/gems/devise-1.1.5/lib/devise/test_helpers.rb:60:in
`warden''
# /Users/peter/.rvm/gems/ruby-[/code]
You''ll notice it says controller: nil. I modified the devise helper,
as
such:
class TestWarden < Warden::Proxy #:nodoc:
attr_reader :controller
def initialize(controller)
@controller = controller
manager = Warden::Manager.new(nil) do |config|
config.merge! Devise.warden_config
end
p "controller: #{controller.inspect}"
super(controller.request.env, manager)
end
Thanks for any help!
--Peter
--
Posted via http://www.ruby-forum.com/.
Rich Price
2011-Feb-06 15:59 UTC
[rspec-users] Controller Testing + Devise = boom (undefined @controller, request)
I am assuming that the get and response lines are not commented
out in your actual test!
Does your code consist ONLY of the lines below?
I think you need to proceed the "it" line with a "describe"
line.
for example:
describe "my test" do
it "...." do
*put other code here*
end
end
On 02/06/2011 12:18 AM, Peter Ehrlich wrote:> Here I am, trying to learn TDD and BDD. Getting start, most simple
> case, and the world is falling apart:
>
> My test code:
>
> it "should respond with success" do
> puts ''hi''
> # get :new
> # response.should be_success
> end
>
>
> My stack trace:
> $ rspec spec
> "controller: nil"
> F
>
> Failures:
>
> 1) VideosController new exposes request and response before and after
> the action
> Failure/Error: Unable to find matching line from backtrace
> NoMethodError:
> undefined method `request'' for nil:NilClass
> #
>
/Users/peter/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.3/lib/active_support/whiny_nil.rb:48:in
> `method_missing''
> #
>
/Users/peter/.rvm/gems/ruby-1.9.2-p136/gems/devise-1.1.5/lib/devise/test_helpers.rb:20:in
> `initialize''
> #
>
/Users/peter/.rvm/gems/ruby-1.9.2-p136/gems/devise-1.1.5/lib/devise/test_helpers.rb:60:in
> `new''
> #
>
/Users/peter/.rvm/gems/ruby-1.9.2-p136/gems/devise-1.1.5/lib/devise/test_helpers.rb:60:in
> `warden''
> # /Users/peter/.rvm/gems/ruby-[/code]
>
> You''ll notice it says controller: nil. I modified the devise
helper, as
> such:
>
> class TestWarden< Warden::Proxy #:nodoc:
> attr_reader :controller
>
> def initialize(controller)
> @controller = controller
> manager = Warden::Manager.new(nil) do |config|
> config.merge! Devise.warden_config
> end
> p "controller: #{controller.inspect}"
> super(controller.request.env, manager)
> end
>
> Thanks for any help!
> --Peter
>
Peter Ehrlich
2011-Feb-06 17:17 UTC
[rspec-users] Controller Testing + Devise = boom (undefined @controller, request)
My apologies! Yes, the describe is there. Here''s the whole file, with
some other commented code (tests, before block) removed:
require ''spec_helper''
describe ''VideosController'' do
describe ''new'' do
it "should respond with success" do
puts ''hi''
# get :new
# response.should be_success
end
end
end
Really without understanding of what is going on under the hood.. :-/
--
Posted via http://www.ruby-forum.com/.