Rspec can';t重复类-轨道

Rspec can';t重复类-轨道,rspec,model,Rspec,Model,当我运行RSpec时,我得到错误不能复制NilClass 我尝试添加了不可加载的,但没有解决它 我认为这是导致错误的函数: class User < ActiveRecord::Base before_save :create_permalink validates :username, presence: true, length: { maximum: 50, minimum: 3 }, uniqueness: { cas

当我运行RSpec时,我得到错误
不能复制NilClass

我尝试添加了
不可加载的
,但没有解决它

我认为这是导致错误的函数:

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
不合格测试包括:

it { should validate_presence_of(:username) }
it { should validate_uniqueness_of(:permalink) }
我还尝试添加:

config.reload_plugins = true if RAILS_ENV == ‘development’
到我的environment.rb文件,但这同样不起作用


我如何阻止这种情况发生,因为它会使我的测试失败?

您有一个测试,它正在创建一个
用户
对象,其用户名为nil
用户名
。有几种可能的修复方法,如果不查看测试代码本身,很难选择一种。它可以简单到在设置测试用户时指定用户名,例如

user = User.create username: 'Test User'
如果问题更复杂,请在问题中包含您的RSpec测试代码

目前,用户名是用户模型中的必填字段,因此可能值得为其添加验证:

class User < ActiveRecord::Base
  validates :username, presence: true
  ...
end
class用户

验证会在保存前的
过滤器之前运行,这样您将在测试中得到一个更有意义的错误。

那么您的问题是什么?@PeterAlfvin道歉,我认为这是显而易见的。问题现在位于底部。我已使用运行测试和正在运行的RSpec时已经存在的用户验证更新了问题。您是否还可以包括失败的代码示例(
it
block)?您在
之前的
块中设置的
@user
很好(它设置了
username
字段),因此可能有不同的
user
对象在失败的测试中发挥作用。我相信我已经发现了问题,我正在使用shoulda gem进行测试,似乎存在兼容性问题。
class User < ActiveRecord::Base
  validates :username, presence: true
  ...
end