2012-06-22 2 views
0

Привет, я работаю над учебником Hartl Ruby on Rails, и я застрял с одним неудачным тестом в главе 9.1. При запуске спецификации в терминале он возвращает:Рубин на рельсах Учебник Майкла Хартла. Ошибка в главе 9.1

sis-macbook-pro:sample_app Lagaspi$ bundle exec rspec spec/ 
...............................F................................ 

Failures: 

1) AuthenticationPages signin with valid information 
Failure/Error: it { should have_link('Users',  href: users_path) } 
    expected link "Users" to return something 
# ./spec/requests/authentication_pages_spec.rb:37:in `block (4 levels) in <top (required)>' 

Finished in 1.42 seconds 
64 examples, 1 failure 

Failed examples: 

rspec ./spec/requests/authentication_pages_spec.rb:37 # AuthenticationPages signin with valid information 

Вот мой код - authentication_pages_spec.rb

require 'spec_helper' 

describe "AuthenticationPages" do 

subject { page } 

describe "signin page" do 
before { visit signin_path } 

it { should have_selector('h1', text: 'Sign in') } 
it { should have_selector('title', text: 'Sign in') } 
end 

describe "signin" do 
before { visit signin_path } 

describe "with invalid information" do 
    before { click_button "Sign in" } 

    it { should have_selector('title', text: 'Sign in') } 
    it { should have_selector('div.alert.alert-error', text: 'Invalid') } 

    describe "after visiting another page" do 
    before { click_link "Home" } 
    it { should_not have_selector('div.alert.alert-error') } 
    end 
end 

describe "with valid information" do 
    let(:user) { FactoryGirl.create(:user) } 
    before { sign_in user } 

    it { should have_selector('title', text: user.name) } 
    it { should have_link('Profile',  href: user_path(user)) } 
    it { should have_link('Sign out', href: signout_path) } 
    it { should have_link('Settings', href: edit_user_path(user)) } 
    it { should have_link('Users',  href: users_path) } 
    it { should_not have_link('Sign in', href: signin_path) } 

    describe "followed by signout" do 
    before { click_link "Sign out" } 
    it { should have_link('Sign in') } 
    end 
end 
end 
end 

И я думаю, что это проблема линии (37):

it { should have_link('Users',  href: users_path) } 

Но что мне делать? Я новичок и не могу понять. Спасибо Si.

ответ

2

Если вы следуете учебник, ссылка должна быть видна только если пользователь вошел в систему. Вы не ускользала ни одному из других тестов неудовлетворительную, когда пользователь вошел в систему, т.е.

it { should have_link('Profile',  href: user_path(user)) } 
it { should have_link('Sign out', href: signout_path) } 
it { should have_link('Settings', href: edit_user_path(user)) } 

И поэтому, имея в виду, я склонен думать, что проблема в представлении, а не в спецификации. С первого взгляда, спецификация выглядит хорошо.

ли ваш _header.html.erb включить этот

... 
<% if signed_in? %> 
    <li><%= link_to "Users", users_path %></li> 
... 
+0

Измененный линии - спасибо очень много. Вы на месте! –

Смежные вопросы