первые указывают сколько раз будет вызван метод : once, exactly, at_least, at_most, и any_number_of_times и это только для моков!!!
вторые что передаем и что ожидаем with, and_return
плохой пример так как методы калькулятора нет смысла макать, и проверка вызова метода раз или 2 показана плоха:(
require 'rspec'
require_relative '../lib/calculator'
RSpec.describe Calculator do
let(:calculator) { Calculator.new }
describe '#add' do
it 'adds two numbers' do
expect(calculator.add(2, 3)).to eq(5)
end
it 'add runs once' do
allow(calculator).to receive(:add).with(2, 3).and_return(5)
# настраивает мок-объект calculator так, чтобы метод add возвращал значение 5 при вызове с аргументами 2 и 3
expect(calculator).to receive(:add).once
# настраивает ожидание, что метод add будет вызван ровно один раз.
calculator.add(2, 3)
# вызываем метод add
end
it 'add runs two' do
allow(calculator).to receive(:add).with(2, 3).and_return(5)
# настраивает мок-объект calculator так, чтобы метод add возвращал значение 5 при вызове с аргументами 2 и 3
expect(calculator).to receive(:add).exactly(2).times
# настраивает ожидание, что метод add будет вызван 2 раза
calculator.add(2, 3)
calculator.add(2, 3)
# вызываем метод add 2 раза
end
end
end
остальные примеры сделаем на анализе ключевой ставки https://www.cbr.ru/hd_base/KeyRate/