首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rails测试错误

Rails测试错误
EN

Stack Overflow用户
提问于 2018-05-31 02:29:43
回答 2查看 615关注 0票数 1

我是一名rails新手,遵循使用Rails 5.1进行敏捷rails Web开发的教程。我使用的是rails 5.2

我用以下命令创建了用户:

rails g scaffold User name:string password:digest
rails db:migrate


class User < ApplicationRecord
  validates :name, presence: true, uniqueness: true
  has_secure_password
end

所有用户测试都会失败,并显示以下信息:

NameError: uninitialized constant ActiveRecord::FixtureSet::RenderContext::BCrypt
test/fixtures/users.yml:5:in `get_binding'

这是fixtures文件:

# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

one:
  name: dave
  password_digest: <%= BCrypt::Password.create('secret') %>

two:
  name: susannah
  password_digest: <%= BCrypt::Password.create('secret') %>

github链接:https://github.com/marko-avlijas/depot

我不知道如何调试这个,谷歌错误没有给我任何东西。

如果我将require 'bcrypt'放在test_helper中,我会得到:

‘`require':无法加载这样的文件-- bcrypt (LoadError)

bo-oz建议我在控制台中粘贴BCrypt::Password.create(“secret”),并在fixture中使用它。但即使这样也行不通。通过web界面,我可以创建新用户,服务器输出没有错误,但在控制台中,我得到的是:

>> BCrypt::Password.create('secret')
NameError: uninitialized constant BCrypt
        from (irb):1
>> require 'bcrypt'
LoadError: cannot load such file -- bcrypt
        from (irb):2
EN

回答 2

Stack Overflow用户

发布于 2018-05-31 03:07:17

似乎没有安装Bcrypt gem。尽管ti在Gemfile下没有注释。尝试再次运行bundle install,然后运行测试。

票数 2
EN

Stack Overflow用户

发布于 2018-05-31 15:49:53

我只是看了一眼你的回购。您的所有fixture文件都带有扩展名.yml。在/fixtures/users.yml中,您嵌入了ruby,因此可以将文件名改为fixtures/users.yml.erb

另外,我上面的评论是错误的,它应该是password_digest: <%= BCrypt::Password.create('secret', cost: 4) %>。仅用于测试,因为将拉伸限制为小于10将极大地提高测试套件的性能。

下载您的项目并运行rails console之后

BCrypt::Password.create('testpassword', cost: 5)
=> "$2a$05$6PI2dUgqbb2LDSxEq2G.reINN9vyVRarFl7NAySQMdArJqqYy0/D."

如果你仍然遇到同样的问题,考虑把gem放到你的test_helper.rb中,看看你是否加载了它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50611322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档