Ruby ActiveModel не вызывает ошибку

Я пытаюсь получить ошибку для моего модульного тестирования с R-Spec, но это не работает.

У меня есть код ниже, используя активную модель для проверки максимальных и минимальных значений, как показано ниже:

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

Для теста ниже:

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

Как я могу использовать Active Model для проверки входов @board.place?

2 ответа

Решение

Вам нужно позвонить 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 }
        ^                   ^         ^^^^^^^^^^^^  

numerically должно быть numericality,

Кроме того, вы нигде не проверяете, вы только что объявили проверки.

Если вы хотите, чтобы ваш place метод, чтобы вызвать ошибки и пройти тесты, вам нужно добавить туда немного кода. Если это действительно то, о чем ваш вопрос, пожалуйста, опубликуйте то, что вы пробовали, но это не помогло.

Другие вопросы по тегам