简体   繁体   English

Ruby On Rails教程(清单9.43)

[英]Ruby On Rails Tutorial (Listing 9.43)

I am following Ruby on Rails Tutorial by Michael Hartl.I am on chapter 9 Listing 9.43, the problem is that I cannot get the delete link to show and my two tests are failing like so 我正在关注Michael Hartl编写的Ruby on Rails教程,我在第9章代码清单9.43中,问题是我无法显示删除链接,并且我的两个测试都失败了

>Failures:
>
> 1) User pages delete links as an admin user 
>     Failure/Error: it { should have_link('delete', href: user_path(User.first)) }
>      expected #has_link?("delete", {:href=>"/users/211"}) to return true, got false
>     # ./spec/requests/user_pages_spec.rb:43:in `block (4 levels) in <top (required)>'
>
>  2) User pages delete links as an admin user should be able to delete another user
>     Failure/Error: click_link('delete', match: :first)
>     Capybara::ElementNotFound:
>       Unable to find link "delete"
>     # ./spec/requests/user_pages_spec.rb:46:in `block (5 levels) in <top (required)>'
>     # ./spec/requests/user_pages_spec.rb:45:in `block (4 levels) in <top (required)>'
>
>Finished in 12.59 seconds
>73 examples, 2 failures
>
>Failed examples:
>
>rspec ./spec/requests/user_pages_spec.rb:43 # User pages delete links as an admin user 
>rspec ./spec/requests/user_pages_spec.rb:44 # User pages delete links as an admin user >should be able to delete another user

Here is my _user.html.eb file 这是我的_user.html.eb文件

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

Here is my factories.rb file 这是我的factory.rb文件

FactoryGirl.define do
  factory :user do
    sequence(:name)  { |n| "Person #{n}" }
    sequence(:email) { |n| "person_#{n}@example.com"}
    password "foobar"
    password_confirmation "foobar"

    factory :admin do
      admin true
    end
  end
end

Here is my sample_data.rake 这是我的sample_data.rake

namespace :db do
  desc "Fill database with sample data"
  task populate: :environment do
   admin= User.create!(name: "Example User",
                 email: "example@railstutorial.org",
                 password: "foobar",
                 password_confirmation: "foobar",
                 admin:true)
    99.times do |n|
      name  = Faker::Name.name
      email = "example-#{n+1}@railstutorial.org"
      password  = "password"
      User.create!(name: name,
                   email: email,
                   password: password,
                   password_confirmation: password)
    end
  end
end

But I am convinced the problem is here, sessions_helper.rb 但我确信问题出在这里,sessions_helper.rb

module SessionsHelper
    def sign_in(user)
        remember_token = User.new_remember_token
        cookies.permanent[:remember_token] = remember_token
        user.update_attribute(:remember_token, User.encrypt(remember_token))
        self.current_user = user
    end
    def signed_in?
        !current_user.nil?
    end

    def current_user=(user)
    @current_user = user
      end

      def current_user?(user)
      user == current_user
    end

    def current_user
        remember_token = User.encrypt(cookies[:remember_token])
        @current_user ||= User.find_by(remember_token: remember_token)
    end

Here is my user_pages_specs describe "delete links" do 这是我的user_pages_specs描述“删除链接”吗

  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
end

Make sure that when you check for the delete link you are logged in as admin . 确保在检查delete link时以admin身份登录。 Also, the following describe block is present in your spec/requests/user_pages_spec.rb file. 另外,您的spec/requests/user_pages_spec.rb文件中存在以下describe块。

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           ##### Sign in as admin before checking delete link
      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
end

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM