如何使用RSpec测试我的设计用户模型验证?

时间:2011-05-12 02:23:43

标签: ruby-on-rails rspec devise

我可以在RSpec中找到测试设计用户控制器和视图的建议。我也看到过设计宝石代码已经过测试的建议,因此花大量时间重新发明轮子是没有用的。

但是,我的用户模型还有其他需要在用户注册时验证的字段。我在user.rb模型中使用标准validates...语句。例如:

validates_presence_of     :nickname

我正在尝试在user_spec.rb中使用简单的验证测试,但是当我尝试创建这样的用户时:

record = Factory.create(:user)

我收到此错误:

undefined method `encode!' for "Confirmation":String

encode!方法不是来自我的代码,它必须是设计正在使用的宝石之一,但我还没有找到它。

我尝试使用User.new和Factory Girl创建用户。我得到同样的错误。在我更新了所有宝石之前,这个规范已经过去了。不幸的是,我没有记下当时更新的所有内容。我已经尝试将设计回滚到以前的版本,但仍然会遇到同样的错误。

Rails 3,RSpec2

感谢您的任何建议。

1 个答案:

答案 0 :(得分:3)

似乎很好,可能是,我的测试代码可以帮助你:

user_spec.rb

require 'spec_helper'

describe User do
  before :each do
    @user = Factory.build(:user)
  end

  it "should not be valid without a first_name" do
    @user.first_name = nil
    @user.should_not be_valid
  end

end

user.rb(Model)

class User < ActiveRecord::Base

  validates_presence_of :first_name

  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable, :lockable and :timeoutable
  devise :database_authenticatable, :registerable, :lockable,
         :recoverable, :rememberable, :trackable
  # Setup accessible (or protected) attributes for your model
  attr_accessible :login, :first_name, :email, :password, :password_confirmation, :remember_me
  attr_accessor :login

  devise :database_authenticatable, :recoverable, :validatable

  protected

  def password_required?
    !persisted? || password.present? || password_confirmation.present?
  end



end