Ruby on rails Rails教程第10.3.3章-4 RSpec错误(应用程序工作)

Ruby on rails Rails教程第10.3.3章-4 RSpec错误(应用程序工作),ruby-on-rails,rspec,will-paginate,railstutorial.org,Ruby On Rails,Rspec,Will Paginate,Railstutorial.org,我得到了4个RSpec错误,这些错误与Will Paginate gem有关,但就我而言,我无法理解它们指的是什么。不过,该应用程序运行良好 Failures: 1) UsersController GET 'index' for signed-in users should be successful Failure/Error: get :index NoMethodError: undefined method `paginate' for #<

我得到了4个RSpec错误,这些错误与Will Paginate gem有关,但就我而言,我无法理解它们指的是什么。不过,该应用程序运行良好

Failures:

  1) UsersController GET 'index' for signed-in users should be successful
     Failure/Error: get :index
     NoMethodError:
       undefined method `paginate' for #<Class:0x9580710>
     # ./app/controllers/users_controller.rb:7:in `index'
     # ./spec/controllers/users_controller_spec.rb:30:in `block (4 levels) in <top (required)>'

  2) UsersController GET 'index' for signed-in users should have the right title
     Failure/Error: get :index
     NoMethodError:
       undefined method `paginate' for #<Class:0x9580710>
     # ./app/controllers/users_controller.rb:7:in `index'
     # ./spec/controllers/users_controller_spec.rb:35:in `block (4 levels) in <top (required)>'

  3) UsersController GET 'index' for signed-in users should have an element for each user
     Failure/Error: get :index
     NoMethodError:
       undefined method `paginate' for #<Class:0x9580710>
     # ./app/controllers/users_controller.rb:7:in `index'
     # ./spec/controllers/users_controller_spec.rb:40:in `block (4 levels) in <top (required)>'

  4) UsersController GET 'index' for signed-in users should paginate users
     Failure/Error: get :index
     NoMethodError:
       undefined method `paginate' for #<Class:0x9580710>
     # ./app/controllers/users_controller.rb:7:in `index'
     # ./spec/controllers/users_controller_spec.rb:47:in `block (4 levels) in <top (required)>'

Finished in 3.12 seconds
80 examples, 4 failures
故障:
1) UsersController为已登录用户获取“索引”应成功
失败/错误:获取:索引
命名错误:
未定义的方法“paginate”#
#./app/controllers/users\u controller.rb:7:in'index'
#./spec/controllers/users\u controller\u spec.rb:30:in'block(4级)in'
2) UsersController为已登录用户获取“索引”时应具有正确的标题
失败/错误:获取:索引
命名错误:
未定义的方法“paginate”#
#./app/controllers/users\u controller.rb:7:in'index'
#./spec/controllers/users\u controller\u spec.rb:35:in'block(4级)in'
3) UsersController为已登录用户获取“索引”应该为每个用户提供一个元素
失败/错误:获取:索引
命名错误:
未定义的方法“paginate”#
#./app/controllers/users\u controller.rb:7:in'index'
#./spec/controllers/users\u controller\u spec.rb:40:in'block(4级)in'
4) UsersController获取已登录用户的“索引”应为用户分页
失败/错误:获取:索引
命名错误:
未定义的方法“paginate”#
#./app/controllers/users\u controller.rb:7:in'index'
#./spec/controllers/users\u controller\u spec.rb:47:in'block(4级)in'
在3.12秒内完成
80例,4次失败
我的用户\u controller.rb文件:

class UsersController < ApplicationController
  before_filter :authenticate, :only => [:index, :edit, :update]
  before_filter :correct_user, :only => [:edit, :update]

  def index
    @title = "All users"
    @users = User.paginate(:page => params[:page])
  end

  def show
    @user = User.find(params[:id])
    @title = @user.name + "<script>"
  end

  def new
    @user = User.new
    @title = "Sign up"
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      sign_in @user
      flash[:success] = "Welcome to the Sample App!"
      redirect_to @user
    else
      @title = "Sign up"
      render 'new'
    end
  end

  def edit
    @user = User.find(params[:id])
    @title = "Edit user"
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(params[:user])
      flash[:success] = "Profile updated."
      redirect_to @user
    else
      @title = "Edit user"
      render 'edit'
    end
  end

  private

    def authenticate
      deny_access unless signed_in?
    end

    def correct_user
      @user = User.find(params[:id])
      redirect_to(root_path) unless current_user?(@user)
    end
end
class UsersController[:index,:edit,:update]
在\u筛选器之前:更正\u用户,:only=>[:编辑,:更新]
def索引
@title=“所有用户”
@users=User.paginate(:page=>params[:page])
结束
def秀
@user=user.find(参数[:id])
@title=@user.name+“”
结束
def新
@user=user.new
@title=“注册”
结束
def创建
@user=user.new(参数[:user])
如果@user.save
在@user中登录
flash[:success]=“欢迎使用示例应用!”
将_重定向到@user
其他的
@title=“注册”
呈现“新”
结束
结束
定义编辑
@user=user.find(参数[:id])
@title=“编辑用户”
结束
def更新
@user=user.find(参数[:id])
如果@user.update_属性(参数[:user])
flash[:success]=“配置文件已更新。”
将_重定向到@user
其他的
@title=“编辑用户”
渲染“编辑”
结束
结束
私有的
def身份验证
除非已登录,否则拒绝访问?
结束
def正确的用户
@user=user.find(参数[:id])
重定向到(根路径),除非当前用户(@user)
结束
结束
我的用户\u控制器\u spec.rb文件:

require 'spec_helper'

describe UsersController do
  render_views

  describe "GET 'index'" do

    describe "for non-signed-in users" do
      it "should deny access" do
        get :index
        response.should redirect_to(signin_path)
        flash[:notice].should =~ /sign in/i
      end
    end

    describe "for signed-in users" do

      before(:each) do
        @user = test_sign_in(Factory(:user))
        second = Factory(:user, :name => "Bob", :email => "another@example.com")
        third  = Factory(:user, :name => "Ben", :email => "another@example.net")

        @users = [@user, second, third]
        30.times do
          @users << Factory(:user, :email => Factory.next(:email))
        end
      end

      it "should be successful" do
        get :index
        response.should be_success
      end

      it "should have the right title" do
        get :index
        response.should have_selector("title", :content => "All users")
      end

      it "should have an element for each user" do
        get :index
        @users[0..2].each do |user|
          response.should have_selector("li", :content => user.name)
        end
      end

      it "should paginate users" do
        get :index
        response.should have_selector("div.pagination")
        response.should have_selector("span.disabled", :content => "Previous")
        response.should have_selector("a", :href => "/users?page=2",
                                           :content => "2")
        response.should have_selector("a", :href => "/users?page=2",
                                           :content => "Next")
      end     
    end
  end

  describe "Get 'show'" do

    before(:each) do
      @user = Factory(:user)
    end

    it "should be successfull" do
      get :show, :id => @user
      response.should be_success
    end

    it "should find the right user" do
      get :show, :id => @user
      assigns(:user).should == @user
    end

     it "should have the right title" do
      get :show, :id => @user
      response.should have_selector("title", :content => @user.name)
    end

    it "should include the user's name" do
      get :show, :id => @user
      response.should have_selector("h1", :content => @user.name)
    end

    it "should have a profile image" do
      get :show, :id => @user
      response.should have_selector("h1>img", :class => "gravatar")
    end
  end

  describe "GET 'new'" do

    it "should be successful" do
      get :new
      response.should be_success
    end

    it "should have the right title" do
      get :new
      response.should have_selector("title", :content => "Sign up")
    end
  end

  describe "POST 'create'" do
    describe "failure" do

      before(:each) do
        @attr = { :name => "", :email => "", :password => "",
                  :password_confirmation => "" }
      end

      it "should not create a user" do
        lambda do
          post :create, :user => @attr
        end.should_not change(User, :count)
      end

      it "should have the right title" do
        post :create, :user => @attr
        response.should have_selector("title", :content => "Sign up")
      end

      it "should render the 'new' page" do
        post :create, :user => @attr
        response.should render_template('new')
      end
    end

    describe "success" do

      before(:each) do
        @attr = { :name => "New User", :email => "user@example.com", :height => "192cm",
                  :password => "foobar", :password_confirmation => "foobar" }
      end

      it "should create a user" do
        lambda do
          post :create, :user => @attr
        end.should change(User, :count).by(1)
      end

      it "should sign the user in" do
        post :create, :user => @attr
        controller.should be_signed_in
      end

      it "should redirect to the user show page" do
        post :create, :user => @attr
        response.should redirect_to(user_path(assigns(:user)))
      end

      it "should have a welcome message" do
        post :create, :user => @attr
        flash[:success].should =~ /welcome to the sample app/i
      end
    end
  end

  describe "GET 'edit'" do

    before(:each) do
      @user = Factory(:user)
      test_sign_in(@user)
    end

    it "should be successful" do
      get :edit, :id => @user
      response.should be_success
    end

    it "should have the right title" do
      get :edit, :id => @user
      response.should have_selector("title", :content => "Edit user")
    end

    it "should have a link to change the Gravatar" do
      get :edit, :id => @user
      gravatar_url = "http://gravatar.com/emails"
      response.should have_selector("a", :href => gravatar_url,
                                         :content => "change")
    end
  end

  describe "PUT 'update'" do

    before(:each) do
      @user = Factory(:user)
      test_sign_in(@user)
    end

    describe "failure" do

      before(:each) do
        @attr = { :email => "", :name => "", :password => "",
                  :password_confirmation => "" }
      end

      it "should render the 'edit' page" do
        put :update, :id => @user, :user => @attr
        response.should render_template('edit')
      end

      it "should have the right title" do
        put :update, :id => @user, :user => @attr
        response.should have_selector("title", :content => "Edit user")
      end
    end

    describe "success" do

      before(:each) do
        @attr = { :name => "New Name", :email => "user@example.org",
                  :password => "barbaz", :password_confirmation => "barbaz" }
      end

      it "should change the user's attributes" do
        put :update, :id => @user, :user => @attr
        @user.reload
        @user.name.should  == @attr[:name]
        @user.email.should == @attr[:email]
      end

      it "should redirect to the user show page" do
        put :update, :id => @user, :user => @attr
        response.should redirect_to(user_path(@user))
      end

      it "should have a flash message" do
        put :update, :id => @user, :user => @attr
        flash[:success].should =~ /updated/
      end
    end
  end

  describe "authentication of edit/update pages" do

    before(:each) do
      @user = Factory(:user)
    end

    describe "for non-signed-in users" do

      it "should deny access to 'edit'" do
        get :edit, :id => @user
        response.should redirect_to(signin_path)
      end

      it "should deny access to 'update'" do
        put :update, :id => @user, :user => {}
        response.should redirect_to(signin_path)
      end
    end

    describe "for signed-in users" do

      before(:each) do
        wrong_user = Factory(:user, :email => "user@example.net")
        test_sign_in(wrong_user)
      end

      it "should require matching users for 'edit'" do
        get :edit, :id => @user
        response.should redirect_to(root_path)
      end

      it "should require matching users for 'update'" do
        put :update, :id => @user, :user => {}
        response.should redirect_to(root_path)
      end
    end

  end
end
require'spec\u helper'
描述UsersController做什么
渲染视图
描述“获取‘索引’”的操作
描述“针对未登录用户”的做法
它“应该拒绝访问”吗
获取:索引
response.should_重定向到(登录路径)
flash[:注意].should=~/sign-in/i
结束
结束
描述“针对已登录用户”的做法
在…之前做
@用户=测试登录(工厂(:用户))
第二个=工厂(:user,:name=>“Bob”,:email=>)another@example.com")
第三个=工厂(:user,:name=>“Ben”,:email=>)another@example.net")
@users=[@user,second,third]
30.5倍
@用户工厂。下一步(:电子邮件))
结束
结束
它“应该成功”吗
获取:索引
回答:你应该成功吗
结束
它“应该有正确的标题”吗
获取:索引
response.should有_选择器(“title”,:content=>“所有用户”)
结束
它“应该为每个用户提供一个元素”do
获取:索引
@用户[0..2]。每个do |用户|
response.should应具有_选择器(“li”,:content=>user.name)
结束
结束
它“应该为用户分页”吗
获取:索引
response.should_选择器(“div.pagination”)
response.should应具有_选择器(“span.disabled”,:content=>“Previous”)
response.应该有_选择器(“a”,:href=>“/users?page=2”,
:content=>“2”)
response.应该有_选择器(“a”,:href=>“/users?page=2”,
:content=>“下一步”)
结束
结束
结束
描述“得到‘表演’”做什么
在…之前做
@用户=工厂(:用户)
结束
它“应该成功”吗
get:show,:id=>@user
回答:你应该成功吗
结束
它“应该找到正确的用户”做什么
get:show,:id=>@user
分配(:用户)。应==@user
结束
它“应该有正确的标题”吗
get:show,:id=>@user
response.should应具有_选择器(“title”,:content=>@user.name)
结束
它“应该包括用户名”吗
get:show,:id=>@user
response.should应具有_选择器(“h1”,:content=>@user.name)
结束
它“应该有一个配置文件图像”吗
get:show,:id=>@user
response.should有_选择器(“h1>img”,:class=>“gravatar”)
结束
结束
描述“获得‘新’”做什么
它“应该成功”吗
获取:新
回答:你应该成功吗
结束
它“应该有正确的标题”吗
获取:新
response.response应该有_选择器(“title”,:content=>“注册”)
结束
结束
描述“发布‘创建’”“做什么
描述“失败”是什么
在…之前做
@attr={:name=>“”,:email=>“”,:password=>“”,
:密码\u确认=>“”
结束
它“不应该创建用户”吗
lambda do
post:create,:user=>@attr
end.should\u不应更改(用户,:计数)
结束
它“应该有正确的标题”吗
post:create,:user=>@attr
response.response应该有_选择器(“title”,:content=>“注册”)
结束
它“应该呈现‘新’页面”吗
post:create,:user=>@attr
gem 'will_paginate', '3.0.pre2'