Ruby on Rails Tutorial by Michael Hartl. Failing Test in Chapter 9.1

ⅰ亾dé卋堺 提交于 2019-12-13 04:28:24

问题


Hi i'm working through the Hartl's Ruby on Rails Tutorial and i'm stuck with one failing test in Chapter 9.1 of. When I run spec in terminal it returns:

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

Here's my code - 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

And I think this is the problem line (37):

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

But what should I do? I'm a newbie and can't figure it out. Thanks Si.


回答1:


If you're following the tutorial, the link should only be visible if a user is logged in. You haven't eluded to any of the other tests failing when the user is logged in, ie

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)) }

And so with that in mind I'm inclined to think that the issue is in the view, not the spec. At a glance, the spec looks fine.

Does your _header.html.erb include this

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


来源:https://stackoverflow.com/questions/11153892/ruby-on-rails-tutorial-by-michael-hartl-failing-test-in-chapter-9-1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!