Ruby on rails RubyonRails教程(清单9.43)

Ruby on rails RubyonRails教程(清单9.43),ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在学习MichaelHartl的RubyonRails教程,我在第9章中列出了9.43,问题是我无法显示delete链接,我的两个测试都失败了 >Failures: > > 1) User pages delete links as an admin user > Failure/Error: it { should have_link('delete', href: user_path(User.first)) } > expected #

我正在学习MichaelHartl的RubyonRails教程,我在第9章中列出了9.43,问题是我无法显示delete链接,我的两个测试都失败了

>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
这是我的样本数据

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
但是我确信问题就在这里,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
这是我的用户页面规格 请描述“删除链接”怎么办


确保在检查
delete链接时,您以
admin
身份登录。 此外,以下描述块出现在
spec/requests/user\u pages\u spec.rb
文件中

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

您可以显示您的规格代码吗?您是否使用规格的样本数据?您通常使用工厂,我的意思是,我认为您的示例数据在这里没有关系,除非您在测试数据库中使用它,运行以
RAILS\u ENV=test
为前缀的任务发现了问题,我错过了描述链接操作的结尾…感谢您的帮助发现了问题,我错过了描述链接动作的结尾…谢谢你的帮助
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
  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
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