2011-05-12 133 views
1

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

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

validates_presence_of  :nickname 

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

record = Factory.create(:user) 

我得到这个错误:

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

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

我试着创建用户使用User.new和工厂的女孩。无论哪种方式我都会得到同样的错误这个规范正在传递,直到我更新了所有的宝石。不幸的是,我没有记下当时更新的所有内容。我试着将设计回滚到以前的版本,但仍然得到相同的错误。

Rails 3,RSpec2

感谢您的任何建议。

回答

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(型号)

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 
+0

感谢。我认为这可能是我创建用户时包含(或缺失)的内容。你的工厂定义为:用户是什么样的?我的是: 'Factory.define:user,:class => User do | f | F.ID 327 f.email '[email protected]' f.password 'shadow33' f.password_confirmation 'shadow33' f.nickname '影子' end' – heyrolled 2011-05-12 12:12:42

+1

你举的例子使我的罪魁祸首.. 。Factory.create(:user)'和'Factory.build(:user)'之间的区别。谢谢您的帮助! – heyrolled 2011-05-12 13:00:31