Guard с RSpec2, Ruby1.9.3, Rails 3.1.3

Я успешно запускаю Guard с уведомлениями, предоставленными Libnotify.

funkdified@funkdified-laptop:~/railsprojects/sample_app$ guard
Guard uses Libnotify to send notifications.
Guard is now watching at '/home/funkdified/railsprojects/sample_app'
Guard::RSpec is running, with RSpec 2!
Running all specs
...

Finished in 0.06053 seconds
3 examples, 0 failures

Если я изменяю файл спецификации, я получаю предупреждение о результатах теста как в терминале, так и во всплывающем уведомлении. Если я изменяю файл контроллера, снова тесты выполняются нормально. Однако, когда я изменяю route.rb, все рушится, и Guard перестает нормально работать и выдает ошибку. У кого-нибудь есть идеи?

Ошибка:

Running: spec/routing
/home/funkdified/.rvm/gems/ruby-1.9.3-p0@rails3tutorial/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:in `load': cannot load such file -- /home/funkdified/railsprojects/sample_app/spec/routing (LoadError)
    from /home/funkdified/.rvm/gems/ruby-1.9.3-p0@rails3tutorial/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:in `block in load_spec_files'
    from /home/funkdified/.rvm/gems/ruby-1.9.3-p0@rails3tutorial/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:in `map'
    from /home/funkdified/.rvm/gems/ruby-1.9.3-p0@rails3tutorial/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:in `load_spec_files'
    from /home/funkdified/.rvm/gems/ruby-1.9.3-p0@rails3tutorial/gems/rspec-core-2.8.0/lib/rspec/core/command_line.rb:22:in `run'
    from /home/funkdified/.rvm/gems/ruby-1.9.3-p0@rails3tutorial/gems/rspec-core-2.8.0/lib/rspec/core/runner.rb:80:in `run_in_process'
    from /home/funkdified/.rvm/gems/ruby-1.9.3-p0@rails3tutorial/gems/rspec-core-2.8.0/lib/rspec/core/runner.rb:69:in `run'
    from /home/funkdified/.rvm/gems/ruby-1.9.3-p0@rails3tutorial/gems/rspec-core-2.8.0/lib/rspec/core/runner.rb:10:in `block in autorun

Забыл упомянуть, что если я убью Guard и перезапущу (после внесения изменений в route.rb), то Guard снова будет работать нормально, предполагая, что тест не пройден:

funkdified@funkdified-laptop:~/railsprojects/sample_app$ guard
Guard uses Libnotify to send notifications.
Guard is now watching at '/home/funkdified/railsprojects/sample_app'
Guard::RSpec is running, with RSpec 2!
Running all specs
..F

Failures:

  1) PagesController GET 'about' returns http success
     Failure/Error: get 'about'
     ActionController::RoutingError:
       No route matches {:controller=>"pages", :action=>"about"}
     # ./spec/controllers/pages_controller_spec.rb:22:in `block (3 levels) in <top (required)>'

Finished in 0.0576 seconds
3 examples, 1 failure

Failed examples:

rspec ./spec/controllers/pages_controller_spec.rb:21 # PagesController GET 'about' returns http success

person Abram    schedule 18.01.2012    source источник


Ответы (2)


Проверьте свой каталог spec. Он должен иметь подкаталог routing для спецификаций маршрутизации. Если нет, просто создайте пустой. Судя по всему, RSpec не создает никаких подкаталогов в spec при запуске rails g rspec:install, но Guard ожидает, что они там будут.

person Teoulas    schedule 16.03.2012

Я думаю, у вас может быть следующая строка в вашем Guardfile:

watch('config/routes.rb')                           { "spec/routing" }

Если у вас нет спецификаций в spec/routing, то не делайте папку, которая вам не нужна. Измените строку на:

watch('config/routes.rb')                           { "spec" }

Теперь все ваши спецификации будут работать, когда вы обновите файл routes.rb.

person B Seven    schedule 17.04.2013