I'm implementing a Calculator DSL that has calculate as a method with add, subtract, multiply and divide block within the the method. When I run the rspec test using 'rspec calculator_spec.rb' command, it gives me an undefined method error for 'calculate'. The error is as follows -
1) Calculator Addition operation returns correct values for positive numbers
Failure/Error: calculate do
NoMethodError:
undefined method `calculate' for #<RSpec::ExampleGroups::Calculator::AdditionOperation:0x00000101d14780>
# ./calculator_spec.rb:16:in `block (3 levels) in <top (required)>'
How can I overcome this error?
In calculator.rb -
class Calculator
attr_accessor :total
def calculate(&block)
self.total = 0
instance_eval(&block)
puts total
end
def add(number)
self.total += number
end
def subtract(number)
self.total -= number
end
def multiply(number)
self.total *= number
end
def divide(number)
self.total /= number
end
end
In calculator_spec.rb -
require './calculator'
describe 'Calculator' do
describe "Addition operation" do
it "returns correct values for positive numbers" do
expect(
calculate do
add 2
add 2
end
).to eq(4)
end
it "returns correct values for negative numbers" do
expect(
calculate do
add -2
add -2
end
).to eq(-4)
end
it "returns correct values for positive and negative numbers" do
expect(
calculate do
add 2
add 10
add -10
end
).to eq(2)
end
end
describe "Mixed operations" do
it "returns correct values when mixing all operations" do
expect(
calculate do
add 2
add -2
subtract -2
multiply 10
divide 10
end
).to eq(2)
end
end
end