2013-08-14 5 views
0

나는 나의 스펙Rails 4 rspec 테스트가 숫자 값에 실패했습니다. 부울 값에 대해서만?

describe "when is_foo is not an integer" do 
    before {@user.is_foo = true} 
    it {should_not be_valid} 
    end 

위의 테스트가 실패에서

validates :is_foo, presence: true, numericality: {only_integer:true, less_than_or_equal_to: 1, greater_than_or_equal_to: 0} 

내 모델에서,하지만 내가 부울 아닌 정수로 is_foo 설정하기 때문에, 시험을 통과해야합니까?

부울은 루비의 정수로 간주됩니까? 왜냐하면 내가했을 때

true.to_i # error 
true == 1 # false 
false == 0 # false 

답변

0

:

> true.class 
=> TrueClass 
> 1.class 
=> Fixnum 

은 당신이 아마 대신 원하는 것은하지만, 부울 값을 테스트하는 검증이다 정수. 따라서 1을 정수와 비교했기 때문에 테스트가 실패했습니다.

1

사양이 정확합니다. 1은 진리입니다 (루비의 진리가 아닌 유일한 값은 false와 nil입니다). 그러나 그것은 부울이 아닙니다. 부울은 숫자가 아닙니다. 그들은 그들 자신의 유형입니다. 숫자 유효성 검사는 유형이 실제로 숫자이며 부울이 숫자가 아닌지 확인합니다. 내가 속성이 예상 될 때 루비 /는 모델 클래스 속성에 충실를 대체 한 레일 생각

validates :is_foo, inclusion => {:in => [true, false]} 
관련 문제