Domanda

I wrote a full rails engine, and trying to test (with RSpec) my controller.

Error only occurred, when render method called. On return or redirect methods all works fine. And problem only with tests. I use dummy app.

stack:

  # Failure/Error: get(:search, params)
  ActionView::Template::Error:
      undefined method `config' for #<Rails::App:0x000000034d9ee8>
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.15/lib/rails.rb:78:in `root'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/template.rb:175:in `inspect'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/template.rb:334:in `identifier_method_name'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/template.rb:330:in `method_name'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/template.rb:267:in `compile'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/template.rb:244:in `block in compile!'
  # <internal:prelude>:10:in `synchronize'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/template.rb:232:in `compile!'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/template.rb:144:in `block in render'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/notifications.rb:123:in `block in instrument'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/notifications.rb:123:in `instrument'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/template.rb:143:in `render'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/renderer/template_renderer.rb:47:in `block (2 levels) in render_template'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/renderer/abstract_renderer.rb:38:in `block in instrument'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/notifications.rb:123:in `block in instrument'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/notifications.rb:123:in `instrument'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/renderer/abstract_renderer.rb:38:in `instrument'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/renderer/template_renderer.rb:46:in `block in render_template'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/renderer/template_renderer.rb:54:in `render_with_layout'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/renderer/template_renderer.rb:45:in `render_template'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/renderer/template_renderer.rb:18:in `render'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/renderer/renderer.rb:36:in `render_template'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_view/renderer/renderer.rb:17:in `render'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/abstract_controller/rendering.rb:110:in `_render_template'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/streaming.rb:225:in `_render_template'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/abstract_controller/rendering.rb:103:in `render_to_body'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/renderers.rb:28:in `render_to_body'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/compatibility.rb:50:in `render_to_body'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/abstract_controller/rendering.rb:88:in `render'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/rendering.rb:16:in `render'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/instrumentation.rb:40:in `block (2 levels) in render'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/core_ext/benchmark.rb:5:in `block in ms'
  # /home/shooma/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/benchmark.rb:295:in `realtime'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/core_ext/benchmark.rb:5:in `ms'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/instrumentation.rb:40:in `block in render'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/instrumentation.rb:83:in `cleanup_view_runtime'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.15/lib/active_record/railties/controller_runtime.rb:24:in `cleanup_view_runtime'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/instrumentation.rb:39:in `render'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/implicit_render.rb:10:in `default_render'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/implicit_render.rb:5:in `send_action'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/abstract_controller/base.rb:167:in `process_action'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/rendering.rb:10:in `process_action'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/abstract_controller/callbacks.rb:18:in `block in process_action'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/callbacks.rb:403:in `_run__3295526729938120009__process_action__2756155078140629527__callbacks'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/callbacks.rb:405:in `__run_callback'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/callbacks.rb:81:in `run_callbacks'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/abstract_controller/callbacks.rb:17:in `process_action'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/rescue.rb:29:in `process_action'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/notifications.rb:123:in `block in instrument'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.15/lib/active_support/notifications.rb:123:in `instrument'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/instrumentation.rb:29:in `process_action'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/params_wrapper.rb:207:in `process_action'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.15/lib/active_record/railties/controller_runtime.rb:18:in `process_action'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/abstract_controller/base.rb:121:in `process'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/abstract_controller/rendering.rb:45:in `process'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/metal/testing.rb:17:in `process_with_new_base_test'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/test_case.rb:490:in `process'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/test_case.rb:54:in `process'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.15/lib/action_controller/test_case.rb:407:in `get'
  # ./spec/controllers/pretty_search_controller_spec.rb:37:in `block (5 levels) in <top (required)>'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example.rb:114:in `instance_eval'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example.rb:114:in `block in run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/extensions/instance_eval_with_args.rb:16:in `instance_exec'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/extensions/instance_eval_with_args.rb:16:in `instance_eval_with_args'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example.rb:247:in `instance_eval_with_args'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/hooks.rb:106:in `block (2 levels) in run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/hooks.rb:104:in `call'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/hooks.rb:104:in `run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/hooks.rb:446:in `run_hook'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:340:in `run_around_each_hooks'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example.rb:256:in `with_around_each_hooks'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example.rb:111:in `run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:390:in `block in run_examples'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:386:in `map'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:386:in `run_examples'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:371:in `run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:372:in `block in run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:372:in `map'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:372:in `run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:372:in `block in run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:372:in `map'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:372:in `run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:372:in `block in run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:372:in `map'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/example_group.rb:372:in `run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/command_line.rb:28:in `block (2 levels) in run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/command_line.rb:28:in `map'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/command_line.rb:28:in `block in run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/reporter.rb:58:in `report'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/command_line.rb:25:in `run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/runner.rb:80:in `run'
  # /home/shooma/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.14.6/lib/rspec/core/runner.rb:17:in `block in autorun'

In which direction i should dig?

engine on GitHub

UPD: when in controller call render - I got error.

but if in controller call render :text => 'foo' - test passes.

problem somewhere in dummy application config. but i can't locate it.

UPD2:

falling spec:

  context 'action should return @options and @results' do
    it '@options should be an instance variable, which eq hash of three keys' do
      get(:search, params)
      # do something
    end
  end

controller:

def search
  # do something
  render
end

RESOLUTION:

It was my fault. Problem was in overloading some internal rails classes in test environment. Sorry for spent time, @sameera207, and thank you for participation.

È stato utile?

Soluzione

the difference between render and redirect is, redirect loads your redirected action but render doesn't,

Ex:

  def new
    @user = User.new 
  end

  def create
    if <some conditions>
       redirect_to 'new' 
    else
       render 'new'
    end
  end

so when you call render, it doesnt create User.new, only redirect will. So probably you are rendering an action which loads something from config.

So the solutions would be

def new
        @user = User.new 
      end

      def create
        if <some conditions>
           redirect_to 'new' 
        else
           @user = User.new
           render 'new'
        end
      end

I hope u get the idea. and if you could post the spec someone might be able to help easier ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top