2013-02-27 6 views
0

rspec을 통해 페이지의 제목을 확인하고 싶습니다. 크롬에서 나는 예상 된 결과를 보지만 rspec이 제목이 비어 있다고 주장한다 (크롬보기 소스에서도 괜찮다). 여기에 몇 가지 코드 :rspec이 실패하는 이유는 무엇입니까?

application.html.rb

<!DOCTYPE html> 
<html> 
<head> 
    <title>site | <%= yield(:title) %></title> 
    <%= stylesheet_link_tag "application", :media => "all" %> 
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
</head> 
<body> 

<%= yield %> 

</body> 
</html> 

home.html.erb

<% provide(:title, 'Home') %> 
<h1><%= yield(:title) %></h1> 
<article> 
    <div><a href="#">Cameras</a></div> 
    <div><a href="#">TVs</a></div> 
    <div><a href="#">Laptops</a></div> 
</article> 

home_page_controller.rb

class HomePageController < ApplicationController 
    def home 
    end 
end 

routes.rb

Reviewsite::Application.routes.draw do 
    get "home_page/home" 
,363,210

home_pages_spec.rb

require 'spec_helper' 
feature "HomePages" do 

    before { visit '/home_page/home'} 

    scenario do 
    expect(page).to have_selector('h1', text: "Home") 
    end 

    scenario do 
    expect(page).to have_selector('title', text: "site | Home") 
    end 

end 

및 오류가

Failures: 

    1) HomePages 
    Failure/Error: expect(page).to have_selector('title', text: "site | Home") 
    Capybara::ExpectationNotMet: 
     expected to find css "title" with text "site | Home" but there were no matches. Also found "", which matched the selector but not all filters. 
    # ./spec/features/home_pages_spec.rb:12:in `block (2 levels) in <top (required)>' 

Finished in 2.52 seconds 
2 examples, 1 failure 

편집 : 여기에 내가 문제가 세션에 관한 참조 내 gemfile

source 'https://rubygems.org' 

gem 'rails', '3.2.12' 
gem 'bootstrap-sass', '2.3.0.1' 
gem 'bcrypt-ruby', '3.0.1' 
gem 'faker', '1.1.2' 
gem 'will_paginate', '3.0.4' 
gem 'bootstrap-will_paginate', '0.0.9' 
gem 'jquery-rails', '2.2.1' 
gem 'mysql2' 
#gem 'execjs' 
gem 'therubyracer', :platforms => :ruby 

# Dev and test gems 
group :development, :test do 
    gem 'rspec-rails', '2.13.0' 
    gem 'guard-rspec', '2.4.1' 
    gem 'guard-spork', '1.4.2' 
    gem 'spork', '0.9.2' 
end 

# Gems used only for assets and not required 
# in production environments by default. 
group :assets do 
    gem 'sass-rails', '3.2.6' 
    gem 'coffee-rails', '3.2.2' 
    gem 'uglifier', '1.3.0' 
end 

#only test gems 
group :test do 
    gem 'capybara', '2.0.2' 
    gem 'factory_girl_rails', '4.2.1' 
    gem 'cucumber-rails', '1.3.0', :require => false 
    gem 'database_cleaner', '0.9.1' 
    # gem 'launchy', '2.1.0' 
    # gem 'rb-fsevent', '0.9.1', :require => false 
    # gem 'growl', '1.0.3' 
end 

group :production do 
    gem 'pg', '0.12.2' 
end 
+0

[카피 바라 : 페이지 제목 테스트 방법] (http://stackoverflow.com/questions/5129423/capybara-how-to-test-the-title-of-a-page) –

답변

0

내가

expect(page.html).to have_selector('title', text: "site | Home") 

로 변경하고 일, 난 더블 체크. 누군가 왜 페이지 혼자서 작동하지 않는지 이해한다면 공유하십시오.

0

입니다. 귀하의 경우 카피 바라의 각 세션은 it 또는 scenario으로 만료됩니다.

따라서 visit page은 첫 번째 시나리오에서 소비되고 두 번째 시나리오는 먹을 음식이 없습니다.

  1. before { visit '/home_page/home'} 부분을 제거하고 모든 시나리오에서 페이지를 방문하십시오

    당신도 시도 할 수 있습니다.

  2. 이 두 시나리오를 하나로 결합하십시오. 그러나 여전히, visit은 그 안에 넣는 것이 좋습니다. 대신

    expect(page).to have_selector('title', text: "site | Home") 
    

+0

나는 각 시나리오를 방문하려고했지만 작동하지 않았다. 플러스 이전 명령은 시나리오 섹션 전에 매번 호출해야합니까, 그렇지 않아? – Nir

+0

시나리오를 'it'으로 이름을 바꿀 수 있습니까? 게다가, 전에 (: 각)가 매번 호출됩니다. 전에 비슷한 문제가 있었고 위의 방법을 적용하여 해결했습니다. –

+0

이전에'before (: each)'를 사용하고 있었지만 여전히 작동하지 않았습니다. 여기에 비슷한 질문이있다. http://stackoverflow.com/questions/9630170/capybara-selenium-with-rspec-before-all-hook –

관련 문제