2010-11-30 2 views
1

Я пытаюсь имитировать что-то похожее на http://relishapp.com/rspec/rspec-rails/v/2-2/dir/routing-specs/access-to-named-routes-in-routing-specsRSpec включает в себя необходимую помощь

У меня есть блок тестовое прохождение:

require 'test_helper' 

    class RoutesTest < ActionController::TestCase 
     test "book name is sent to store#index' do 
     assert_routing 'book/mytitle', {:controller => 'book', :action => 'index', :title => 'mytitle'} 
     end  
    end 

Я пытаюсь тайному это к испытанию RSpec (бег RSpec 2.2 под Rails3.0.3)

Вот тест:

require 'spec_helper' 
    include RSpec::Rails::Matchers::RoutingMatchers 
    include ActionDispatch::Assertions::RoutingAssertions 

    describe "book specific routes" do 
     it "should recognize title in path" do 
     {:get => "book/mytitle"}.should route_to(:controller => "book", :action => "index", :title => "mytitle") 
     end 
    end 

Но это приводит к:

Failures: 

    1) book specific routes should recognize title in path 
    Failure/Error: {:get => "book/mytitle"}.should route_to(:controller => "book", :action => "index", :title => "mytitle") 
    undefined method `recognize_path' for nil:NilClass 
    # ./spec/route_spec.rb:9:in `block (2 levels) in <top (required)>' 

Любая идея, из которой прибывает nilClass? Любая помощь будет оценена по достоинству.

ответ

2

Это двойной включает в ActionDispatch::Assertions::RoutingAssertions, который вызывает отказ - не уверен, почему. Удалите два оператора include, и все должно быть хорошо. Файл спецификации должен находиться в /spec/routing. Вы можете обернуть пример describe BooksController для точек стиля, но он будет работать без него.

1

Я предполагаю, что помощники должны использоваться внутри спецификации контроллера. Они уже должны быть там, поэтому не нужно было включать их вручную. Просто убедитесь, что вы описываете контроллер.

describe BooksController do 
    it "should recognize title in path" do 
    # ... 
    end 
end