运行 Rspec 和 Sinatra 时,我不断收到 ArgumentError:参数数量错误(给定 2,预期为 0)

Bart_Judge

我有一个名为authenticate 的类方法,它适用于User 类。

def self.authenticate(email:, password:)
  result = DatabaseConnection.query("SELECT * FROM users WHERE email = '#{email}'")

  User.new(result[0]['id'], result[0]['email'])
end

我有一个 Rspec 测试;

feature 'authentication' do
  it 'a user can sign in' do
    User.create(email: '[email protected]', password: 'password123')

    visit 'sessions/new'
    fill_in(:email, with: '[email protected]')
    fill_in(:password, with: 'password123')
    click_button 'Sign In'

    expect(page).to have_content 'Welcome, [email protected]'
  end
end

运行 Rspec 时,出现以下错误;

1) authentication a user can sign in
     Failure/Error:
       def initialize(id:, email:)
         @id = id
         @email = email
       end

     ArgumentError:
       wrong number of arguments (given 2, expected 0)
     # ./lib/user.rb:15:in `initialize'
     # ./lib/user.rb:23:in `new'
     # ./lib/user.rb:23:in `authenticate'
     # ./app.rb:84:in `block in <class:BookmarkManager>'

下面是我的 Sinatra 应用程序;

require 'sinatra/base'
require './lib/bookmark'
require './lib/user'
require './database_connection_setup.rb'
require 'uri'
require 'sinatra/flash'
require_relative './lib/tag'
require_relative './lib/bookmark_tag'

class BookmarkManager < Sinatra::Base
  enable :sessions, :method_override
  register Sinatra::Flash

  get '/' do
    "Bookmark Manager"
  end
  get '/bookmarks' do
    @user = User.find(session[:user_id])
    @bookmarks = Bookmark.all
    erb :'bookmarks/index'
  end

  post '/bookmarks' do
    flash[:notice] = "You must submit a valid URL" unless     Bookmark.create(url: params[:url], title: params[:title])

    redirect '/bookmarks'
  end

  get '/bookmarks/new' do
    erb :'bookmarks/new'
  end

  delete '/bookmarks/:id' do
    Bookmark.delete(id: params[:id])
    redirect '/bookmarks'
  end

  patch '/bookmarks/:id' do
    Bookmark.update(id: params[:id], title: params[:title], url: params[:url])
    redirect('/bookmarks')
  end

  get '/bookmarks/:id/edit' do
    @bookmark = Bookmark.find(id: params[:id])
    erb :'bookmarks/edit'
  end

  get '/bookmarks/:id/comments/new' do
    @bookmark_id = params[:id]
    erb :'comments/new'
  end

  post '/bookmarks/:id/comments' do
    Comment.create(text: params[:comment], bookmark_id: params[:id])
    redirect '/bookmarks'
  end

  get '/bookmarks/:id/tags/new' do
    @bookmark_id = params[:id]
    erb :'/tags/new'
  end

  post '/bookmarks:id/tags' do
    tag = Tag.create(content: params[:tag])
    BookmarkTag.create(bookmark_id: params[:id], tag_id: tag.id)
    redirect '/bookmarks'
  end

  get '/users/new' do
    erb :'users/new'
  end

  post '/users' do
    user = User.create(email: params[:email], password: params[:password])
    session[:user_id] = user.id
    redirect '/bookmarks'
  end

  get '/sessions/new' do
    erb :'sessions/new'
  end

  post '/sessions' do
    user = User.authenticate(email: params[:email], password: params[:password])
    if user
      session[:user_id] = user.id
      redirect('/bookmarks')
    else
      flash[:notice] = 'Please check your email or password.'
      redirect('/sessions/new')
    end
  end

  run! if app_file == $0
end

下面是完整的 User 类

require_relative './database_connection'
require 'bcrypt'

class User
  def self.create(email:, password:)
    encypted_password = BCrypt::Password.create(password
    )
    result = DatabaseConnection.query("INSERT INTO users (email, password) VALUES('#{email}', '#{encypted_password}') RETURNING id, email;")

    User.new(id: result[0]['id'], email: result[0]['email'])
  end

  attr_reader :id, :email

  def initialize(id:, email:)
    @id = id
    @email = email
  end

  def self.authenticate(email:, password:)
    result = DatabaseConnection.query("SELECT * FROM users WHERE email = '#{email}'")

    User.new(result[0]['id'], result[0]['email'])
  end

  def self.find(id)
    return nil unless id
    result = DatabaseConnection.query("SELECT * FROM users WHERE id = #{id}")
    User.new(
      id: result[0]['id'],
      email: result[0]['email'])
  end
end

我不明白的是,为什么 Rspec 说它需要 0 个参数,而该initialize方法显然需要两个参数(id 和电子邮件)?我需要从 id 和 email 方法中获取authenticate并将其发送到initialize. 我认为这就是我正在做的事情,但 Rspec 和 sinatra 都表示不同。

提前致谢。

最大取悦者

在这里,您将 id 作为顺序参数传递(在authenticate方法中)。

User.new(result[0]['id'], result[0]['email'])

但是您User.new期望关键字参数:

def initialize(id:, email:)

只需通过这种方式传递它们:

User.new(id: result[0]['id'], email: result[0]['email'])

另外,我注意到了一些事情,如果您DatabaseConnection.query没有返回任何结果,您authenticate将引发一个错误result[0]['id'](它会说"Undefined method [] for Nil:NilClass"。也许您应该解决这个问题并为其添加一个测试用例,例如:

def self.authenticate(email:, password:)
  result = DatabaseConnection.query(
    "SELECT * FROM users WHERE email = '#{email}'"
  )
  record = result[0]
  if record
    User.new(id: result[0]['id'], email: result[0]['email'])
  end
end

这样,nil如果没有匹配的用户,该方法将返回,并且您的if user内部post '/sessions'将正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

最小测试错误-ArgumentError:参数数量错误(给定1,预期为0)

来自分类Dev

Active Record Destroy ArgumentError(错误的参数数量(给定1,预期为0)):

来自分类Dev

fastlane 脚本中的参数数量错误(给定 0,预期为 1)(ArgumentError)

来自分类Dev

Docker运行产生错误``初始化'':错误的参数数量(给定2个,预期为1个)(ArgumentError)

来自分类Dev

RSpec-如何修复-ArgumentError:错误的参数数量(给定0,应为1)-Ruby

来自分类Dev

Ruby:错误:当我给出正确数量的参数时,参数数量错误(给定 1,预期为 0)

来自分类Dev

参数数量错误(Sinatra - rspec)

来自分类Dev

自我保存!产生参数错误#<ArgumentError:参数数量错误(0表示2)>

来自分类Dev

添加 aasm gem 后,应用程序给我错误:参数数量错误(给定 1,预期为 0)

来自分类Dev

Sinatra:运行rspec测试时记录噪音

来自分类Dev

Sinatra:运行rspec测试时记录噪音

来自分类Dev

控制器规范中的参数数量错误(给定 2,预期为 0)

来自分类Dev

生成的RSpec控制器测试失败,参数数量错误(给定2个,预期为1个)

来自分类Dev

最喜欢的操作出现错误:参数数量错误(给定1,预期为0)?

来自分类Dev

Jekyll:参数数量错误(给定2个,预期为1个)(ArgumentError)

来自分类Dev

ArgumentError:Update_Attribute 方法的参数数量错误(给定 1,预期为 2)

来自分类Dev

Ruby on Rails:参数数量错误(给定 0,预期为 1)

来自分类Dev

ArgumentError:向带有make_flaggable gem的微博中添加喜欢,喜欢和不适当的按钮时,参数数量错误(3个代表0)

来自分类Dev

Sinatra:参数数量错误(0..2为4)

来自分类Dev

ArgumentError异常:当我尝试上传图像时,参数数目错误(给定2个,预期为1个)(Rails 4; paperclip 5; paperclip-meta)

来自分类Dev

Rails:参数数目错误(给定1,预期为0)

来自分类Dev

为什么在Rails中的搜索查询会出现错误“参数数量错误(给定1,预期为0)”?

来自分类Dev

git push heroku master时参数数目错误(0为1)(ArgumentError)

来自分类Dev

检查是否在 ApplicationController 中进行了身份验证,导致“参数数量错误(给定 1,预期为 0)”

来自分类Dev

无法获取 Rails ActiveRecord:条件有效,“参数数量错误(给定 1,预期为 0)”

来自分类Dev

错误数量的参数(给定 0,预期为 1) - Ruby

来自分类Dev

运行CarrierWave和Sinatra时发生未定义的方法连接错误。

来自分类Dev

ArgumentError处的参数数目错误/错误(0表示2)

来自分类Dev

使用Rspec测试使用错误数量的参数(给定2个,预期为1个)的get:index测试失败

Related 相关文章

  1. 1

    最小测试错误-ArgumentError:参数数量错误(给定1,预期为0)

  2. 2

    Active Record Destroy ArgumentError(错误的参数数量(给定1,预期为0)):

  3. 3

    fastlane 脚本中的参数数量错误(给定 0,预期为 1)(ArgumentError)

  4. 4

    Docker运行产生错误``初始化'':错误的参数数量(给定2个,预期为1个)(ArgumentError)

  5. 5

    RSpec-如何修复-ArgumentError:错误的参数数量(给定0,应为1)-Ruby

  6. 6

    Ruby:错误:当我给出正确数量的参数时,参数数量错误(给定 1,预期为 0)

  7. 7

    参数数量错误(Sinatra - rspec)

  8. 8

    自我保存!产生参数错误#<ArgumentError:参数数量错误(0表示2)>

  9. 9

    添加 aasm gem 后,应用程序给我错误:参数数量错误(给定 1,预期为 0)

  10. 10

    Sinatra:运行rspec测试时记录噪音

  11. 11

    Sinatra:运行rspec测试时记录噪音

  12. 12

    控制器规范中的参数数量错误(给定 2,预期为 0)

  13. 13

    生成的RSpec控制器测试失败,参数数量错误(给定2个,预期为1个)

  14. 14

    最喜欢的操作出现错误:参数数量错误(给定1,预期为0)?

  15. 15

    Jekyll:参数数量错误(给定2个,预期为1个)(ArgumentError)

  16. 16

    ArgumentError:Update_Attribute 方法的参数数量错误(给定 1,预期为 2)

  17. 17

    Ruby on Rails:参数数量错误(给定 0,预期为 1)

  18. 18

    ArgumentError:向带有make_flaggable gem的微博中添加喜欢,喜欢和不适当的按钮时,参数数量错误(3个代表0)

  19. 19

    Sinatra:参数数量错误(0..2为4)

  20. 20

    ArgumentError异常:当我尝试上传图像时,参数数目错误(给定2个,预期为1个)(Rails 4; paperclip 5; paperclip-meta)

  21. 21

    Rails:参数数目错误(给定1,预期为0)

  22. 22

    为什么在Rails中的搜索查询会出现错误“参数数量错误(给定1,预期为0)”?

  23. 23

    git push heroku master时参数数目错误(0为1)(ArgumentError)

  24. 24

    检查是否在 ApplicationController 中进行了身份验证,导致“参数数量错误(给定 1,预期为 0)”

  25. 25

    无法获取 Rails ActiveRecord:条件有效,“参数数量错误(给定 1,预期为 0)”

  26. 26

    错误数量的参数(给定 0,预期为 1) - Ruby

  27. 27

    运行CarrierWave和Sinatra时发生未定义的方法连接错误。

  28. 28

    ArgumentError处的参数数目错误/错误(0表示2)

  29. 29

    使用Rspec测试使用错误数量的参数(给定2个,预期为1个)的get:index测试失败

热门标签

归档