当我运行RSpec时,我收到错误can't dup NilClass
。
我尝试添加unloadable
,但它无法修复它。
我认为这是导致错误的函数:
class User < ActiveRecord::Base
before_save :create_permalink
validates :username, presence: true, length: { maximum: 50, minimum: 3 },
uniqueness: { case_sensitive: false }
validates :permalink, presence: true, length: { maximum: 50, minimum: 3 },
uniqueness: { case_sensitive: false }
private
def create_permalink
self.permalink = username.dup.parameterize
end
end
user_spec.rb
require 'spec_helper'
describe User do
before do
@user = User.new(name: Faker::Name.name, username: "example",
email: Faker::Internet.email, password: "password",
password_confirmation: "password")
end
.
.
.
end
测试失败包括:
it { should validate_presence_of(:username) }
it { should validate_uniqueness_of(:permalink) }
我也尝试过添加:
config.reload_plugins = true if RAILS_ENV == ‘development’
到我的environment.rb文件,但是再次没有用。
我如何阻止这种情况发生,因为它使我的测试失败了?
答案 0 :(得分:0)
您的测试是使用nil User
创建username
对象。对此有几种可能的修复方法,如果没有看到测试代码本身就难以选择。它可以像设置测试用户时指定用户名一样简单,例如
user = User.create username: 'Test User'
如果您的RSpec测试代码更复杂,请在其中包含您的RSpec测试代码。
由于用户名是用户模型中的必填字段,因此可能值得为其添加验证:
class User < ActiveRecord::Base
validates :username, presence: true
...
end
验证在before_save
过滤器之前运行,因此您的测试中会出现更有意义的错误。