2013-12-19 2 views
0

내가 검증 한 후 실행되는 다음의 방법 (들)이있는 사용자 모델을 테스트하기 위해 노력하고 있습니다 :했어야 매처 (Matchers) - 정의되지 않은 메서드 GSUB

def generate_slug(args) 
    column = args[:column] 
    self.slug = slug_title(column) 
end 

private 

def slug_text(column) 
    self.send(column).gsub(/[^0-9a-z ]/i, '').gsub(' ','-').downcase 
end 

def slug_number_of_occurences(slug_title) 
    self.class.where(slug: slug_title).count 
end 

def slug_title(column) 
    count = 0 
    slug_title = slug_text(column) 
    until slug_number_of_occurences(slug_title) == 0 
    slug_title = slug_text(column) + (count == 0 ? "" : count.to_s) 
    count += 1 
    end 
    return slug_title 
end 

이러한 방법은 내 했어야의 정규 시험의 일부를 일으키는 다음 오류와 함께 실패 :

←[31mNoMethodError←[0m: 
    ←[31mundefined method `gsub' for nil:NilClass←[0m 
m  # ./app/models/concerns/shared/sluggable.rb:18:in `slug_text'←[0m 
m  # ./app/models/concerns/shared/sluggable.rb:27:in `slug_title'←[0m 
m  # ./app/models/concerns/shared/sluggable.rb:8:in `generate_slug'←[0m 
m  # ./app/models/user.rb:10:in `block in <class:User>'←[0m 
m  # ./spec/models/user_spec.rb:28:in `block (2 levels) in <top (required)>'←[0m 

한 예는 다음과 같습니다

it { should ensure_length_of(:password).is_at_least(6) } 

방법이 있나요 이 오류는 무시할 수 있습니까?

답변

2

아니요. 문제 해결 기가 사용하는 접근법은 해당 열에 다양한 값을 할당하고 유효성 검사가 예상대로 작동하는지 확인하는 것입니다. 모델이 특정 일치자가 사용하는 값을 지원할 수없는 경우 (예 : 오류 발생 방지), 값을 지원하도록 모델을 변경해야합니다 (이 경우 암호를 nil으로 올리지 마십시오) 또는 그 특정 shoulda 일치를 사용하여 중지합니다.