Как мне проверить мои разработанные валидации пользовательских моделей с использованием RSpec? - PullRequest
1 голос
/ 12 мая 2011

Я могу найти рекомендации для тестирования пользовательских контроллеров и представлений в RSpec. Я также видел предположения о том, что код разработанного драгоценного камня уже протестирован, поэтому бесполезно тратить много времени на изобретение колеса.

Однако в моей модели пользователя есть другие поля, которые мне нужно проверить, когда пользователь регистрируется. Я использую стандартные операторы validates... в модели user.rb. Например:

validates_presence_of     :nickname

Я пытаюсь использовать простое проверочное тестирование в моем user_spec.rb, но когда я пытаюсь создать пользователя следующим образом:

record = Factory.create(:user)

Я получаю эту ошибку:

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

Метод encode! не приходит из моего кода, это, должно быть, один из драгоценных камней, который использует устройство, но я пока не смог его найти.

Я пытался создать пользователя, используя User.new и Factory Girl. Я получаю ту же ошибку в любом случае. Эта спецификация проходила, пока я не сделал обновление всех своих драгоценных камней. К сожалению, я не держал в курсе все, что было обновлено в то время. Я попытался откатить устройство до предыдущих версий, но все равно получаю ту же ошибку.

Рельсы 3, RSpec2

Спасибо за любой совет.

1 Ответ

3 голосов
/ 12 мая 2011

Кажется, все в порядке, возможно, мой код тестирования вам поможет:

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
...