2013-07-30 4 views
0

적어도 하나 이상의 대문자가있는 암호가 필요한 사용자 모델이 있습니다. 다음과 같이 내 사양이 기록됩니다사용자 정의 유효성 검사를위한 shouldc matchers with_message 버그

subject { User.new } 
it { should_not allow_value("test123$").for(:password).with_message("password requires an uppercase letter (\"test123$\")") } 

그러나,이 사양은 다음과 실패를 반환 오류 배열이 분명 올바른 메시지가 포함처럼

Expected errors to include ["password requires an uppercase letter (\"test123$\")"] when password is set to "test123$", got errors: ["password requires an uppercase letter (\"test123$\")"] 

그것은 나에게 보인다. 여기서 내가 뭘 잘못하고 있니?

편집

:

[ 
    [/[A-Z]/, "requires an uppercase letter"], 
    [/[a-z]/, "requires a lowercase letter"], 
    [/[0-9]/, "requires a number"], 
    [/[^\w]/, "requires a special character"] 
].each do |(format, message)| 
    validates :password, :format => {:with => format, 
    :message => message}, 
    :allow_blank => true 
end 

답변

0

난 단지 당신이 보여준 것보다 다른 코드를 실행하고 있다는 결론을 내릴 수있다 : 는 여기에 내가 SPEC에 노력하고있어 검증합니다. RSpec 오류 메시지는 오류 배열에 문자열 자체가 포함될 것으로 예상되는 것이 아니라 해당 문자열이 포함 된 배열을 포함 할 것으로 예상한다는 것을 나타냅니다. 이 오류 메시지는 표시된 내용 대신 ....with_message(["..."])이 포함 된 사양을 실행 한 결과 일 수 있습니까?

관련 shoulda 코드는 매우 간단합니다. https://github.com/thoughtbot/shoulda-matchers/blob/d680e7d47ba0d0bc6eba888cc4648f65b61ac2cf/lib/shoulda/matchers/active_model/allow_value_matcher.rb의 라인 120을 참조하십시오.

+0

이 오류 메시지를 생성하는 유효성 검사 코드를 추가했습니다. 거기에 뭔가 펑키가 있습니까? – user2287662

+0

코드를 읽을 수 있도록 질문에 추가해야합니다. –

+0

죄송합니다. 지금 수정해야합니다. – user2287662