2010-12-03 3 views
2

rspec ожидает, что ваши спецификации контроллера будут в/spec/контроллеры. У меня есть некоторые модули, которые включены в мои контроллеры. Единственный способ проверить их, насколько я могу судить, - создать фиктивный контроллер, включить в него модуль и проверить оттуда. Проблема в том, что спецификации модуля находятся в/spec/lib/module, поэтому ControllerExampleGroup не включается, что означает, что я не могу назвать вспомогательные методы «действием» и т. Д.Контрольные рельсовые контроллеры, которые не входят в спецификации/контроллеры с rspec 2

Я могу вручную импортировать эти, которые получает большую часть пути, но я получаю эту ошибку:

Failure/Error: Unable to find matching 
line from backtrace undefined method 
`path_set' for nil:NilClass 
    activesupport-3.0.3/lib/active_support/whiny_nil.rb:48:in 
`method_missing' 
    rspec-rails-2.2.1/lib/rspec/rails/view_rendering.rb:68 
    rspec-core-2.2.1/lib/rspec/core/example_group.rb:291:in 
`instance_eval' 
    rspec-core-2.2.1/lib/rspec/core/example_group.rb:291:in 
`instance_eval_with_rescue' 
    rspec-core-2.2.1/lib/rspec/core/hooks.rb:39:in 
`run_in' 
    rspec-core-2.2.1/lib/rspec/core/hooks.rb:70:in 
`run_all' 
    rspec-core-2.2.1/lib/rspec/core/hooks.rb:70:in 
`each' 
    rspec-core-2.2.1/lib/rspec/core/hooks.rb:70:in 
`run_all' 
    rspec-core-2.2.1/lib/rspec/core/hooks.rb:106:in 
`run_hook' 
    rspec-core-2.2.1/lib/rspec/core/example_group.rb:194:in 
`eval_after_eachs' 
    rspec-core-2.2.1/lib/rspec/core/example_group.rb:194:in 
`each' 
    rspec-core-2.2.1/lib/rspec/core/example_group.rb:194:in 
`eval_after_eachs' 
    rspec-core-2.2.1/lib/rspec/core/example.rb:130:in `run_after_each' 
    rspec-core-2.2.1/lib/rspec/core/example.rb:44:in `run' 
    rspec-core-2.2.1/lib/rspec/core/example.rb:88:in `with_around_hooks' 
    rspec-core-2.2.1/lib/rspec/core/example.rb:37:in `run' 
    rspec-core-2.2.1/lib/rspec/core/example.rb:81:in `with_pending_capture' 
    rspec-core-2.2.1/lib/rspec/core/example.rb:80:in `catch' 
    rspec-core-2.2.1/lib/rspec/core/example.rb:80:in `with_pending_capture' 
    rspec-core-2.2.1/lib/rspec/core/example.rb:36:in `run' 
    rspec-core-2.2.1/lib/rspec/core/example_group.rb:261:in 
`run_examples' 
    rspec-core-2.2.1/lib/rspec/core/example_group.rb:257:in 
`map' 
    rspec-core-2.2.1/lib/rspec/core/example_group.rb:257:in 
`run_examples' 
    rspec-core-2.2.1/lib/rspec/core/example_group.rb:231:in 
`run' 
    rspec-core-2.2.1/lib/rspec/core/example_group.rb:232:in 
`run' 
    rspec-core-2.2.1/lib/rspec/core/example_group.rb:232:in 
`map' 
    rspec-core-2.2.1/lib/rspec/core/example_group.rb:232:in 
`run' 
    rspec-core-2.2.1/lib/rspec/core/command_line.rb:27:in 
`run' 
    rspec-core-2.2.1/lib/rspec/core/command_line.rb:27:in 
`map' 
    rspec-core-2.2.1/lib/rspec/core/command_line.rb:27:in 
`run' 
    rspec-core-2.2.1/lib/rspec/core/reporter.rb:12:in `report' 
    rspec-core-2.2.1/lib/rspec/core/command_line.rb:24:in 
`run' 
    rspec-core-2.2.1/lib/rspec/core/runner.rb:55:in 
`run_in_process' 
    rspec-core-2.2.1/lib/rspec/core/runner.rb:46:in 
`run' 
    rspec-core-2.2.1/lib/rspec/core/runner.rb:10:in 
`autorun' 
    /Users/jeffdeville/.rvm/gems/ree-1.8.7-2010.02/bin/rspec:19 

Предложения?

+0

Похожа вручную импортировать не совсем работают либо, я получаю: – 2010-12-03 20:05:14

ответ

8

Если у вас есть спецификации, что это не в одном из стандартных мест, вы всегда можете сказать RSpec, передавая: Тип атрибута к методу описания:

describe MyController, :type => :controller do 
    ... 
end 

Для specing модулей, которые предназначены для включения с помощью контроллера rspec 2 имеет очень удобный способ создания анонимных контроллеров.

describe MyModule do 

    context "when included by a controller", :type => :controller do 
     controller do  # anonymous subclass of ActionController::Base 
      include MyModule 

      def index 
       head :ok 
      end 
     end 

     it "works" do 
      get "index" 
      response.should be_success 
     end 
    end 
end 

Более подробная информация здесь в RSpec документов (полученная от особенностей огурца): http://relishapp.com/rspec/rspec-rails/dir/controller-specs/anonymous-controller

+0

Великого пример того, как проверить поведение контроллера указанных в библиотечных модулях! – 2012-08-28 17:30:09

Смежные вопросы