2013-08-18 4 views
-1

R-Spec로 단위 테스트를 수행하는 중에 오류가 발생하려고하지만 작동하지 않습니다.Ruby ActiveModel이 오류를 발생시키지 않습니다.

require_relative '../spec_helper' 
require 'board' 

describe Board do 

    before do 
     @board = Board.new 
    end 

    describe 'initialise' do 

     it 'should not exceed top limit' do 
      @board.place(1, 6).should raise_error 
     end 

     it 'should not exceed bottom limit' do 
      @board.place(1, 0).should raise_error 
     end 

     it 'should not exceed right limit' do 
      @board.place(6, 1).should raise_error 
     end 

     it 'should not exceed left limit' do 
      @board.place(0, 1).should raise_error 
     end 

     it 'should place robot within its limits' do 
      @board.place(1, 1).should_not raise_error 
     end 

    end 

end 

가 어떻게의 입력을 검증하기 위해 활성 모델을 사용할 수 있습니다 아래의 테스트를 위해

require 'active_model' 

class Board < Struct.new(:width, :height) 
    include ActiveModel::Validations 

    attr_reader :top_limit, :bottom_limit, :left_limit, :right_limit 

    validate :top_limit, presense:true, numerically: {only_integer: true, :less_than => 6} 
    validate :bottom_limit, presense:true, numerically: {only_integer: true, :greater_than => 0} 
    validate :left_limit, presense:true, numerically: {only_integer: true, :greater_than => 0} 
    validate :right_limit, presense:true, numerically: {only_integer: true, :less_than => 6} 

    def place(x, y) 

    end 

end 

:

나는 최대 아래 당 최소 값을 검증하기 위해 활성 모델을 사용하여 코드 아래에 있습니다 @board.place?

답변

1

어떻게 든 valid? 번으로 전화해야합니다. 기본적으로 지금 테스트는 Board을 인스턴스화하고 place 메서드를 호출하는 것입니다.

당신은 당신의 사양에 다음을 수행 할 수 :

let(:instance) { Board.new } 

it { expect(instance.valid?).to be_false } 

또한, 당신의 검증은 잘못 :

validates :top_limit, presence: true, numericality: { only_integer: true, less_than: 6 } 
     ^    ^  ^^^^^^^^^^^^ 
0

numerically 아마 numericality해야한다.

또한 실제로 유효성 검사를하지 않고 방금 유효성을 선언했습니다.

place 메서드에서 오류를 발생시키고 테스트를 통과하려면 해당 코드에 코드를 추가해야합니다. 그게 당신의 질문에 관한 것이라면, 당신이 시도하지 못한 것을 게시하십시오.

관련 문제