2012-01-18 8 views
0

Были следующие Rails Tutorial Майкл Харт Рельсы версии 3.0 на Mac OS X 10.7Rails page_controller_spec.rb тест не должен быть неудачным, но есть ошибка?

$ RSpec спецификации/

......FF 

Failures: 

    1) PagesController GET 'help' should be successful 
    Failure/Error: get 'help' 
    ActionController::RoutingError: 
     No route matches {:controller=>"pages", :action=>"help"} 
    # ./spec/controllers/pages_controller_spec.rb:45:in `block (3 levels) in <top (required)>' 

    2) PagesController GET 'help' should have the right title 
    Failure/Error: get 'help' 
    ActionController::RoutingError: 
     No route matches {:controller=>"pages", :action=>"help"} 
    # ./spec/controllers/pages_controller_spec.rb:49:in `block (3 levels) in <top (required)>' 

Finished in 0.14686 seconds 
8 examples, 2 failures 

Failed examples: 

rspec ./spec/controllers/pages_controller_spec.rb:44 # PagesController GET 'help' should be successful 
rspec ./spec/controllers/pages_controller_spec.rb:48 # PagesController GET 'help' should have the right title 

Тест выглядит следующим образом:

require 'spec_helper' 

describe PagesController do 
    render_views 

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

    it "should have the right title" do 
     get 'home' 
     response.should have_selector("title", 
     :content => "Ruby on Rails Tutorial Sample App | Home") 
    end 
    end 

    describe "GET 'contact'" do 
    it "should be successful" do 
     get 'contact' 
     response.should be_success 
    end 
    it "should have the right title" do 
     get 'contact' 
     response.should have_selector("title", 
     :content => "Ruby on Rails Tutorial Sample App | Contact") 
    end 
    end 

    describe "GET 'about'" do 
    it "should be successful" do 
     get 'about' 
     response.should be_success 
    end 
    it "should have the right title" do 
     get 'about' 
     response.should have_selector("title", 
     :content => "Ruby on Rails Tutorial Sample App | About") 
    end 
    end 

    describe "GET 'help'" do 
    it "should be successful" do 
     get 'help' 
     response.should be_success 
    end 
    it "should have the right title" do 
     get 'help' 
     response.should have_selector("title", 
     :content => "Ruby on Rails Tutorial Sample App | Help") 
    end 
    end 
end 

И у меня есть in page_controller.rb

class PagesController < ApplicationController 
    def home 
    @title = "Home" 
    end 

    def contact 
    @title = "Contact" 
    end 

    def about 
    @title = "About" 
    end 

    def help 
    @title = "Help" 
    end 

end 

И в routes.rb У меня есть

SampleApp::Application.routes.draw do 
    get "pages/home" 
    get "pages/contact" 
    get "pages/about" 
    get "pages/help" 
end 

И, конечно, я также создал страницу help.html.erb в приложение/просмотров/страниц Странное дело, когда я запускаю сервер рельсов и перейти к локальной машине: 3000/pages/help. Я получаю правильную страницу с соответствующим заголовком, заставляя ее выглядеть так, как будто тест должен был пройти, но это не так. Кроме того, проходят контакты, дома и тесты, но когда я только что добавил помощь, она не по какой-то неизвестной причине. Это действительно подтачивает меня, какое простое решение я упустил из виду, что это сводит меня с ума?

+0

По какой-то причине мой файл help.html.erb 275 байт, в то время как мой о, контакт, и домой .html.erb страниц все 2К, несмотря на то, что они почти точно одинаковое количество символов в каждом. Это, безусловно, связано с тем, что help.html.erb не работает при тестировании. Также тип документа для справки - TextMate Document, а другие просто говорят «Документ». Странный.. ? – Laser

+0

Я думаю, что вы на правильном пути - в коде нет ничего плохого. Я попытаюсь удалить и заново создать файл help.html.erb. –

+0

спасибо за идею, к сожалению, это не помогло. Особенно странно, что это дает мне ошибку в том, что рейк-маршруты противоречат друг другу, как объяснено здесь: http://stackoverflow.com/questions/8917201/my-computer-hates-me – Laser

ответ

2

Скачивал код и побежал:

........ 
8 examples, 0 failures 
Finished in 0.18184 seconds 

Он работает ГЕТ «помощь», так что я думаю, что вы используете это в автотесте и не перезаряжать. Возможное?

+0

Спасибо, закройте терминал и откройте, и в новом окне все работает нормально. Простота волшебна. – Laser

2

Ваш код в порядке. Проблема в том, что ваш предыдущий код получил кеширование. Закрывая терминал и открывая новое окно, вы эффективно очищаете свой кеш. Вы можете столкнуться с теми же проблемами, если вы не отключите кеширование в тестовой среде. Перейти к config/environments/test.rb и изменить config.cache_classes = true к config.cache_classes = false