Надежность Rspec с маршрутизацией.(Rails на примере учебника RoR) - PullRequest
4 голосов
/ 27 декабря 2011

Я разочаровываюсь в Rspec, работая над учебником по Ruby on Rails Learn by Example на 5.2.

В настоящее время я пытаюсь протестировать свою маршрутизацию с помощью rspec, и тесты всегда возвращаются как сбой, даже если я правильно выполнил шаги, описанные в руководстве, и проверил, что маршрутизация работаетСам проверяю и проверяю маршрутизацию вручную.

Например, layout_links_spec.rb выглядит так:

require 'spec_helper'

describe "LayoutLinks" do

    it "should have a Home page at '/'" do
        get '/'
        response.should have_selector('title', :content => "Home")
    end

    it "should have a Contact page at '/contact'" do
        get '/contact'
        response.should have_selector('title', :content => "Contact")
    end

    it "should have an About page at '/about'" do
        get '/about'
        response.should have_selector('title', :content => "About")
    end

    it "should have a Help Page at '/help'" do
        get '/help'
        reponse.should have_selector('title', :content => "Help")
    end

end

А мои маршруты выглядят так:

SampleApp::Application.routes.draw do
  match '/contact', :to => 'pages#contact'
  match '/about', :to => 'pages#about'
  match '/help', :to => 'pages#help'
  get "pages/home"
  get "pages/contact"
  get "pages/about"
  get "pages/help"

  root :to => 'pages#home'
end

Rspecвозвращает этот сбой:

  5) LayoutLinks should have a Home page at '/'
     Failure/Error: get '/'
     ActionController::RoutingError:
       No route matches [GET] "/"
     # ./spec/requests/layout_links_spec.rb:6:in `block (2 levels) in <top (required)>'

  6) LayoutLinks should have a Contact page at '/contact'
     Failure/Error: get '/contact'
     ActionController::RoutingError:
       No route matches [GET] "/contact"
     # ./spec/requests/layout_links_spec.rb:11:in `block (2 levels) in <top (required)>'

  7) LayoutLinks should have an About page at '/about'
     Failure/Error: get '/about'
     ActionController::RoutingError:
       No route matches [GET] "/about"
     # ./spec/requests/layout_links_spec.rb:16:in `block (2 levels) in <top (required)>'

  8) LayoutLinks should have a Help Page at '/help'
     Failure/Error: get '/help'
     ActionController::RoutingError:
       No route matches [GET] "/help"
     # ./spec/requests/layout_links_spec.rb:21:in `block (2 levels) in <top (required)>'

Я получаю аналогичную ошибку и с моими тестами pages_controller_spec.rb

  describe "GET 'home'" do
    it "should be successful" do
      get 'home'
      response.should be_success
    end

Получает эту ошибку rspec:

  1) PagesController GET 'home' should be successful
     Failure/Error: get 'home'
     ActionView::Template::Error:
       undefined local variable or method `root_path' for #<#<Class:0x00000103e8b210>:0x00000103e87de0>
     # ./app/views/layouts/_header.html.erb:3:in `_app_views_layouts__header_html_erb__1560745193027372362_2179584160'
     # ./app/views/layouts/application.html.erb:10:in `_app_views_layouts_application_html_erb__2627526215404316040_2176993080'
     # ./spec/controllers/pages_controller_spec.rb:15:in `block (3 levels) in <top (required)>'

Iпроверил мой код с учебником, и он выглядит правильно.Если я введу URL-адрес localhost: 3000 / home или / about и т. Д., Я попаду на правильную страницу, которая указывает, что она должна быть правильно перенаправлена.Я мог бы просто продолжить учебник, но я хотел бы научиться делать TDD и использовать rspec на практике, но я чувствую, что не могу полагаться на rspec, чтобы сделать это ...

1 Ответ

3 голосов
/ 19 февраля 2012

У меня была точно такая же проблема, и я был близок к тому, чтобы что-то бросить.

Перезапуск Spork решил проблему и все снова стало хорошо с миром

...