我正在尝试使用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
的输入?
答案 0 :(得分: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 }
^ ^ ^^^^^^^^^^^^
答案 1 :(得分:0)
numerically
应该是numericality
。
此外,您实际上并未在任何地方进行验证,您刚刚宣布了验证。
如果您希望place
方法引发错误并通过测试,则需要在其中添加一些代码。如果这就是您的问题的真实含义,请发布您尝试过的不起作用的内容。