ActiveRecord에서 다음 유효성 검사를 수행합니다.RSpec을 사용하여 Rails에서 포함 검증을 테스트하려면 어떻게해야합니까?
validates :active, :inclusion => {:in => ['Y', 'N']}
다음을 사용하여 모델 유효성 검사를 테스트하고 있습니다.
should_not allow_value('A').for(:active)
should allow_value('Y').for(:active)
should allow_value('N').for(:active)
더 깨끗하고 더 많은 테스트 방법이 있습니까? 나는 현재 RSpec2와 shoulda matchers를 사용하고있다.
편집 난 단지,이 테스트의이 아마 '확인'방법은, 했어야 그것을 위해 자신의 사용자 정의 정규 표현을 쓸 수 필요이 아무것도 누군가를 제공하지 않습니다 발견 둘러보고 일부 후
(아마도 프로젝트에 다시 기여할 것입니다). 어떤 사람이 토론 할 수있는 링크 :
should_ensure_value_in_range
이 하나를 사용할 수 있습니다 무엇에 근접 있지만 범위와하지의 값 목록을 허용합니다. 사용자 정의 일치 프로그램은이를 기반으로 할 수 있습니다.예 :
it { should validate_inclusion_check_constraint_on :status, :allowed_values => %w(Open Resolved Closed) } it { should validate_inclusion_check_constraint_on :age, :allowed_values => 0..100 }
매처
다른 값을 허용하지 않는지 확인하려면 다음과 같이하면됩니다 :'it {should_not allow_value ('?') for (: active)}'- 당신이 말한 것처럼 가능한 모든 값을 검사 할 수는 없지만 허용 된 모든 값을 확인하는 것 외에 합리적인 적용 범위처럼 보입니다. – bjnord
당신이 ** 언급 한 shoulda_matcher는 ** 원래의 설명대로 작동합니다. 즉 제공된 배열에없는 값을 사용할 수 없습니다. [문서 참조] (https://github.com/thoughtbot/shoulda-matchers#ensure_inclusion_of). 좋은 측정을 위해, 나는 이것을 Rails 앱에서 테스트했고 올바르게 작동한다. –
@LarsLevie - 의견을 주셔서 감사합니다. 그들은'disallows_value_outside_of_array? '를 확인하기 위해 유효성 검사를 변경 한 것 같습니다. 이전 https://github.com/thoughtbot/shoulda-matchers/blob/v1.2.0/lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb#L86 vs now https://github.com/thoughtbot/shoulda- matchers/blob/15abdf066732828034efea751c2937aa81d080fe/lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb # L90 –