2014-02-15 36 views
0

我是Ruby on Rails的新成員,正在構建一個論壇的示例項目。我嘗試設置一個可以刪除其他管理員的超級管理員。但總是不能通過規範。在erb文件中使用if語句

這裏是我的代碼 的意見/用戶/ _user.html.erb

<li> 
<%= gravatar_for user, size: 52 %> 
<%= link_to user.name, user %> 
<% if (current_user.admin? && !current_user?(user) && !user.admin?) || current_user.sadmin? %> 
| <%= link_to "delete", user, method: :delete, 
       data: { confirm: "You sure?" } %> 
<% end %> 
</li> 

規格/請求/ user_page_spec

describe "delete links" do 

    it { should_not have_link('delete') } 

    describe "as an admin user" do 
    let(:admin) { FactoryGirl.create(:admin) } 
    before do 
     sign_in admin 
     visit users_path 
    end 

    it { should have_link('delete', href: user_path(User.first)) } 
    it "should be able to delete another user" do 
     expect do 
     click_link('delete', match: :first) 
     end.to change(User, :count).by(-1) 
    end 
    it { should_not have_link('delete', href: user_path(admin)) } 
    end 

    describe "as an sadmin user" do 
    let(:sadmin) { FactoryGirl.create(:sadmin) } 
    let(:admin) {FactoryGirl.create(:admin)} 
    before do 
     sign_in sadmin 
     visit users_path 
    end 

    it { should have_link('delete', href: user_path(User.first)) } 
    it "should be able to delete another user" do 
     expect do 
     click_link('delete', match: :first) 
     end.to change(User, :count).by(-1) 
    end 
    it { should have_link('delete', href: user_path(admin))} 
    it { should_not have_link('delete', href: user_path(sadmin)) } 
    end 
end 
end 

,當我嘗試運行規範的錯誤是

1) User pages index delete links as an sadmin user 
    Failure/Error: it { should_not have_link('delete', href: user_path(sadmin)) } 
     expected #has_link?("delete", {:href=>"https://stackoverflow.com/users/422"}) to return false, got true 
    # ./spec/requests/user_pages_spec.rb:66:in `block (5 levels) in <top (required)>' 

    2) User pages index delete links as an sadmin user 
    Failure/Error: it { should have_link('delete', href: user_path(admin))} 
     expected #has_link?("delete", {:href=>"https://stackoverflow.com/users/423"}) to return true, got false 
    # ./spec/requests/user_pages_spec.rb:65:in `block (5 levels) in <top (required)>' 

我不確定它是否意味着我在erb文件中使用的語法是錯誤的或者其他一些東西我亂編輯?在此先感謝

+0

不,語法沒問題。 '失敗'意味着測試中的期望未被滿足,而不是代碼未能執行。當你在'sadmin'用戶上撥打'admin'時會發生什麼?它是「真」還是「假」? –

回答

0

<% if (current_user.admin? && !current_user?(user) && !user.admin?) || current_user.sadmin? %> 
     | <%= link_to "delete", user, method: :delete, 
       data: { confirm: "You sure?" } %> 
    <% end %> 

,意味着如果「current_user.sadmin?」爲真,鏈接將顯示無論其他條件。所以療法是失敗

Failure/Error: it { should_not have_link('delete', href: user_path(sadmin)) } 
     expected #has_link?("delete", {:href=>"https://stackoverflow.com/users/422"}) to return false, got true 

我猜

it { should have_link('delete', href: user_path(admin))} 

失敗,是監守管理員用戶在

it "should be able to delete another user" do 
     expect do 
     click_link('delete', match: :first) 
     end.to change(User, :count).by(-1) 
    end 

部分被刪除了?

+0

嗨,謝謝你的回覆,我修復了這個錯誤,其他文件出錯了......謝謝! – user3312479