I probably have done some silly mistake but by running rake shows this

Due to infinite loop it runs infinitely until i stopped it.
The folder structure follows :

calculator.rb
class Calculator
attr_accessor :result
def initialize
@result = 0.0
end
def add(param)
@result += param
end
def subtract(param)
@result -= param
end
def multiply(param)
@result *= param
end
def divide(param)
@result /= param
end
def cancel
@result = 0.0
end
end
class CommandProcessor
attr_accessor :input
attr_accessor :operation
attr_accessor :calculator
def parser
calculator = Calculator.new
while true
input = gets.to_s.chomp
operation = input.split(' ')[0]
param = input.split(' ')[1]
if operation.eql? 'exit'
exit
elsif operation.eql? 'add'
calculator.add(param.to_f)
puts calculator.result
elsif operation.eql? 'subtract'
calculator.subtract(param.to_f)
puts calculator.result
elsif operation.eql? 'multiply'
calculator.multiply(param.to_f)
puts calculator.result
elsif operation.eql? 'divide'
calculator.divide(param.to_f)
puts calculator.result
elsif operation.eql? 'cancel'
calculator.cancel
puts calculator.result
else
puts "invalid op"
end
end
end
end
command = CommandProcessor.new
command.parser
calculator_spec.rb
require 'spec_helper'
require "calculator.rb"
describe "CommandProcessor" do
it "will exit on input exit" do
@cmd = CommandProcessor.new
@cmd.stub!(:gets).and_return("add 3\n")
@cmd.parser
expect(@cmd.calculator.result).to eq 3
end
end
describe "Calculator" do
it "will add a number" do
calculator = Calculator.new
expect(calculator.add 2).to eq 2.0
expect(calculator.add 2.0).to eq 4.0
end
it "will subtract a number" do
calculator = Calculator.new
expect(calculator.subtract 2).to eq -2.0
expect(calculator.subtract 2.0).to eq -4.0
end
it "will multiply a number" do
calculator = Calculator.new
expect(calculator.multiply 2).to eq 0.0
expect(calculator.multiply 2.0).to eq 0.0
end
it "will divide a number" do
calculator = Calculator.new
expect(calculator.divide 2).to eq 0.0
expect(calculator.divide 2.0).to eq 0.0
end
it "will make result zero on cancel" do
calculator = Calculator.new
calculator.cancel
expect(calculator.result).to eq 0.0
end
end
Have i structured the code wrongly or my test are wrong? The code works fine but not the test cases.