2012-05-20 1 views
1

루비 뉴비 여기. 나는 Rails 튜토리얼을 따르고 있으며 5.3 re : route를 고수했다.레일 튜토리얼 - 섹션 5.2 라우팅/Rspec 오류

5 페이지 (집, 약, 도움, 연락처)가 모두 비슷한 테스트 세트로되어 있으며 rspec은 '집'테스트에서만 실패합니다. application_helper를 사용하고 있기 때문에 home.html.erb에 지정할 필요가 없습니다. 맞습니까? 나는 또한 understanding rails routes: match vs root in routes.rb의 조언을 받아서 "일치"/ static_pages/home '=>'static_pages # home ' "을 routes.db에 추가했습니다.

잠시 동안이 2 가지 오류에 집착했습니다. 도와주세요. 감사!

오류 :

1) Static pages Home page should have the h1 'Sample App' 
Failure/Error: page.should have_selector('h1', text: 'Sample App') 
expected css "h1" with text "Sample App" to return something 
# ./spec/requests/static_pages_spec.rb:9:in `block (3 levels) in <top (required)>' 

2) Static pages Home page should have the base title 
Failure/Error: page.should have_selector('title', 
expected css "title" with text "Ruby on Rails Tutorial Sample App" to return something 
# ./spec/requests/static_pages_spec.rb:13:in `block (3 levels) in <top (required)>' 

home.html.erb

<div class="center hero-unit"> 
<h1>Welcome to the Sample App</h1> 

<h2> 
This is the home page for the 
<a href="http://railstutorial.org/">Ruby on Rails Tutorial</a> 
sample application. 
</h2> 

<%= link_to "Sign up now!", '#', class: "btn btn-large btn-primary" %> 
</div> 

<%= link_to image_tag("rails.png", alt: "Rails"), 'http://rubyonrails.org/' %> 

static_pages_spec.rb

require 'spec_helper' 

describe "Static pages" do 

    describe "Home page" do 

    it "should have the h1 'Sample App'" do 
    visit root_path 
    page.should have_selector('h1', text: 'Sample App') 
    end 

    it "should have the base title" do 
    visit root_path 
    page.should have_selector('title', text: "Ruby on Rails Tutorial Sample App") 
    end 

    it "should not have a custom page title" do 
    visit root_path 
    page.should_not have_selector('title', text: '| Home') 
    end 
end 

application.html.erb

<!DOCTYPE html> 
<html> 
    <head> 
    <title><%= full_title(yield(:title)) %></title> 
    <%= stylesheet_link_tag "application", media: "all" %> 
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
    <%= render 'layouts/shim' %>  
    </head> 
    <body> 
    <%= render 'layouts/header' %> 
    <div class="container"> 
     <%= yield %> 
     <%= render 'layouts/footer' %> 
    </div> 
    </body> 
</html> 
01,235 16,

application_helper.rb

module ApplicationHelper 

# Returns the full title on a per-page basis. 
def full_title (page_title) 
    base_title = "Ruby on Rails Tutorial Sample App" 
    if page_title.empty? 
     base_title 
    else 
     "#{base_title} | #{page_title}" 
    end 
end 

end 

routes.rb

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

    root to: 'static_pages#home' 
end 

는 아무것도 필요하면 알려주세요. 감사!

답변

5

public/index.html 파일을 제거하고 브라우저에서 들어올 수 있다는 것을 시각적으로 확인했으며 예상 템플릿이 렌더링되고 있습니까? 그렇지 않으면 사양이 괜찮아 보입니다.

+0

그게 전부입니다. 고맙습니다! 공용/인덱스를 제거하지 않으면 컨트롤러가 집 대신 기본 루트 (public/index.html)에서 테스트를 수행하게됩니까? – Vanezia

+1

맞습니다. capybara는 브라우저를 통해 자신과 마찬가지로 단순히 '/'를 요청합니다. public /에있는 파일은 레일 경로보다 우선하므로 새 프로젝트를 시작할 때 기본 index.html 파일을 제거해야합니다. 필자는 레일 코어 메일 링리스트에서 이것이 신입 사원들에게 더욱 분명 해져야한다고 논의했다고 생각합니다. 아마도 4.0으로 만들 것입니다. –