我可以在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
感谢您的任何建议。
答案 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