2012-11-03 32 views
3

!我一直在閱讀Michael Hartl的RoR教程書,並且我在Rspec上停留了7次失敗。我一直在尋找3小時來發現錯誤,但我無法找到它。錯誤表示我沒有link_to退出(一個來自用戶頁面,一個來自編輯頁面),link_to更改以及一堆has_selector錯誤。這裏是rspec user_pages_spec.rb。我幾乎可以肯定的edit.html.erb和header.html中都很好,但如果沒有人看到什麼不對本rspec的不是生病後它Rspec預計link_to沒有找到任何東西

describe "edit" do 
    let(:user) { FactoryGirl.create(:user) } 
    before do 
     sign_in user 
     visit edit_user_path(user) 
    end 

    describe "page" do 
     it { should have_selector('h1', text: "Update your profile") } 
     it { should have_selector('title', text: "Edit user") } 
     it { should have_link('change', href: 'http://gravatar.com/emails') } 
    end 

    describe "with valid information" do 
     let(:new_name) { "New Name" } 
     let(:new_email) { "[email protected]" } 
     before do 
      fill_in "Name",    with: new_name 
      fill_in "Email",   with: new_email 
      fill_in "Password",   with: user.password 
      fill_in "Confirm Password", with: user.password 
      click_button "Save changes" 
     end 

     it { should have_selector('title', text: new_name) } 
     it { should have_selector('div.alert.alert-success') } 
     it { should have_link('Sign out', href: signout_path) } 
     specify { user.reload.name.should == new_name } 
     specify { user.reload.email.should == new_email } 
    end 

這裏的誤差和該文件的其餘多數民衆贊成與此相關的

Failures: 

    1) User pages signup with valid information after saving the user 
    ←[31mFailure/Error:←[0m ←[31mit { should have_link('Sign out') }←[0m 
     ←[31mexpected link "Sign out" to return something←[0m 
←[36m  # ./spec/requests/user_pages_spec.rb:30:in `block (5 levels) in <top (
required)>'←[0m 

    2) User pages edit page 
    ←[31mFailure/Error:←[0m ←[31mit { should have_link('change', href: 'http:// 
gravatar.com/emails') }←[0m 
     ←[31mexpected link "change" to return something←[0m 
←[36m  # ./spec/requests/user_pages_spec.rb:134:in `block (4 levels) in <top 
(required)>'←[0m 

    3) User pages edit page 
    ←[31mFailure/Error:←[0m ←[31mit { should have_selector('title', text: "Edit 
user") }←[0m 
     ←[31mexpected css "title" with text "Edit user" to return something←[0m 
←[36m  # ./spec/requests/user_pages_spec.rb:133:in `block (4 levels) in <top 
(required)>'←[0m 

    4) User pages edit page 
    ←[31mFailure/Error:←[0m ←[31mit { should have_selector('h1', text: "Upda 
te your profile") }←[0m 
     ←[31mexpected css "h1" with text "Update your profile" to return somethin 
g←[0m 
←[36m  # ./spec/requests/user_pages_spec.rb:132:in `block (4 levels) in <top 
(required)>'←[0m 

    5) User pages edit with valid information 
    ←[31mFailure/Error:←[0m ←[31mit { should have_selector('div.alert.alert-suc 
cess') }←[0m 
     ←[31mexpected css "div.alert.alert-success" to return something←[0m 
←[36m  # ./spec/requests/user_pages_spec.rb:149:in `block (4 levels) in <top 
(required)>'←[0m 

    6) User pages edit with valid information 
    ←[31mFailure/Error:←[0m ←[31mit { should have_selector('title', text: new_n 
ame) }←[0m 
     ←[31mexpected css "title" with text "New Name" to return something←[0m 
←[36m  # ./spec/requests/user_pages_spec.rb:148:in `block (4 levels) in <top 
(required)>'←[0m 

    7) User pages edit with valid information 
    ←[31mFailure/Error:←[0m ←[31mit { should have_link('Sign out', href: signou 
t_path) }←[0m 
     ←[31mexpected link "Sign out" to return something←[0m 
←[36m  # ./spec/requests/user_pages_spec.rb:150:in `block (4 levels) in <top 
(required)>'←[0m 



<% provide(:title, "Edit user") %> 
<h1>Update your profile</h1> 
<div class="row"> 
    <div class="span6 offset3"> 
     <%= form_for(@user) do |f| %> 
      <% render 'shared/error_messages' %> 

      <%= f.label :name %> 
      <%= f.text_field :name %> 

      <%= f.label :email %> 
      <%= f.text_field :email %> 

      <%= f.label :password %> 
      <%= f.password_field :password %> 

      <%= f.label :password_confirmation, "Confirm Password" %> 
      <%= f.password_field :password_confirmation %> 
     <%= f.submit "Save changes", class: "btn btn-large btn-primary" %> 
     <% end %> 

     <%= gravatar_for @user %> 
     <a href="http://gravatar.com/emails">change</a> 
    </div> 
</div> 


<header class="navbar navbar-fixed-top"> 
    <div class="navbar-inner"> 
     <div class="container"> 
      <%= link_to "Anime Ranting", root_path, id: "logo" %> 
      <nav> 
       <ul class="nav pull-right"> 
        <li><%= link_to "Home", root_path %></li> 
        <li><%= link_to "Help", help_path %></li> 
        <% if signed_in? %> 
         <li><%= link_to "Users", '#' %></li> 
         <li id="fat-menu" class="dropdown"> 
          <a href-"#" class="dropdown-toggle" data-toggle="dropdown"> 
           Account <b class="caret"></b> 
          </a> 
          <ul class="dropdown-menu"> 
           <li><%= link_to "Profile", current_user %></li> 
           <li><%= link_to "Settings", edit_user_path(current_user) %></li> 
           <li class="divier"></li> 
           <li><%= link_to "Sign out", signout_path, method: "delete" %></li> 
          </ul> 
         </li> 
        <% else %> 
         <li><%= link_to "Sign in", signin_path %></li> 
        <% end %> 
       </ul> 
      </nav> 
     </div> 
    </div> 
</header> 
+0

你可以發佈錯誤嗎? –

+0

在這裏你去。希望有幫助 – TakaGoto

+2

我會嘗試的第一件事就是評論除了一個測試以外的每個測試,並找出爲什麼一個測試沒有通過。然後打開另一個測試,等等,只是粘貼一堆代碼,並說「這是行不通的,怎麼了?」並不是很有用。 – dpassage

回答

1

你錯過subject { page }剛下describe "edit" do。這可以讓你使用語法it { should ...