RSpec включает необходимую помощь - PullRequest
1 голос
/ 30 ноября 2010

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

У меня есть прохождение модульного теста:

    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 ]

2 голосов
/ 01 декабря 2010

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

1 голос
/ 01 декабря 2010

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

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