以下のコードでは、require の後にアクション クラスが返されます。
ロボットクラス
attr_accessor :action
def initialize
@action = Actions.new
end
def left
@action.left
end
Action クラスはDirection::Move.new
、initialize メソッドで定義されたインスタンスを使用するようになりました。
アクション クラス
def place(x_coordinate, y_coordinate, direction = :north)
@x_coordinate = x_coordinate
@y_coordinate = y_coordinate
@direction = direction
@report.log_position(x_coordinate, y_coordinate, direction) if
x_coordinate.between?(@board.left_limit, @board.right_limit) &&
y_coordinate.between?(@board.bottom_limit, @board.top_limit) &&
@move.directions.grep(direction).present?
end
def left
@move.left(direction)
end
方向が割り当てられてから呼び出されるように、place メソッドを使用して Actions クラスを定義しましattr_accessor
たrobot.left
。
describe '#left' do
it 'should turn left' do
action.place(0, 0, Direction::North)
expect(robot.left).to eq(Direction::West)
end
end
しかし、Rspec テストを実行すると、以下のエラーが返されます。
RSpec: no implicit conversion from nil to integer
このメソッドに渡すことが許可されていないrobot.left
のはなぜですか?action.left
direction
action.left