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
метод, чтобы вызвать ошибки и пройти тесты, вам нужно добавить туда немного кода. Если это действительно то, о чем ваш вопрос, пожалуйста, опубликуйте то, что вы пробовали, но это не помогло.