2015-01-16 2 views
0

이 간단한 검증 테스트는 실패 :실패 사용자 확인 및 다형성 협회

require 'test_helper' 
class UserTest < ActiveSupport::TestCase 
    def setup 
    @user = User.new(name: "Example User", 
        email: "[email protected]", 
        character_attributes: {callsign: "example"}, 
        password: "foobar", 
        password_confirmation: "foobar" 
        ) 
    end 

    test "should be valid" do 
    assert @user.valid?, "#{@user.errors.messages}" 
    end 

end 

...이 메시지와 함께 : UserTest에서 사용자 생성이 왜 character.sociable_id"=>["can't be blank"]

는 이해가 안 돼요 유효한 사용자를 만들지 못했습니다.

각 사용자 has_one :character 및 각 문자 belongs_to 사용자.

사용자 모델 : User.rb :

class User < ActiveRecord::Base 

    attr_accessor :remember_token, :activation_token, :reset_token 
    has_one :character, as: :sociable, dependent: :destroy 
    accepts_nested_attributes_for :character 
    has_secure_password 
    before_validation do 
    self.create_character unless character 
    end 
    before_save do 
    self.email.downcase! 
    end 
    before_create :create_activation_digest 
    validates :name, presence: true, 
        length: { maximum: 50 } 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-]+(?:\.[a-z\d\-]+)*\.[a-z]+\z/i 
    validates :email, presence: true, 
        format:  { with: VALID_EMAIL_REGEX }, 
        uniqueness: { case_sensitive: false } 
    validates :password, length: { minimum: 6 }, allow_blank: true 
    validates :character, presence: true 
    . 
    . 
end 

되는 문자 모델 : Character.rb :

class Character < ActiveRecord::Base 
    belongs_to :sociable, polymorphic: true 
    has_many :posts, dependent: :destroy 
    before_save do 
    self.callsign.downcase! 
    end 
    validates :sociable_id, presence: true 
    VALID_CALLSIGN_REGEX = /\A[a-z\d\-.\_]+\z/i 
    validates :callsign, presence: true, 
         length:  { maximum: 20 }, 
         format:  { with: VALID_CALLSIGN_REGEX }, 
         uniqueness: { case_sensitive: false } 

end 

답변

1

그것은해야한다 : -

test "should be valid" do 
    assert @user.valid? , "#{@user.errors.messages}" 
end 
+0

감사합니다, character.Sociable_id를 비워 둘 수 없다는 사실이 밝혀졌습니다. 나는 캐릭터가 저장 될 때까지 sociable_id가 설정되지 않았기 때문에 실패했다고 생각한다. – Bazley