В данном примере instance_variable_set используется для демонстрации, как можно напрямую устанавливать переменные экземпляра в тестах. В реальных сценариях это может быть полезно, если вы хотите протестировать метод, который зависит от переменной экземпляра, но не хотите или не можете вызвать метод, который её устанавливает. на примере нашего калькулятора:

class Calculator
  def initialize(initial_value = 0)
    @result = initial_value
  end

  def add(a, b)
    @result += a + b
  end

  def multiply_result_by(factor)
    @result *= factor
  end

  def result
    @result
  end
end

И тест для него:

RSpec.describe Calculator do
  describe "#add" do
    it "returns the sum of two numbers and multiplies the result by a factor" do
      calculator = Calculator.new
      
      # Устанавливаем начальное значение переменной экземпляра @result
      calculator.instance_variable_set(:@result, 5)
      
      # Вызываем метод add, который изменяет @result, добавляя к нему сумму 3 и 4
      calculator.add(3, 4)
      
      # Проверяем, что @result теперь равен 12 (5 + 3 + 4)
      expect(calculator.result).to eq(12)
      
      # Вызываем метод multiply_result_by, который умножает @result на заданный фактор
      calculator.multiply_result_by(2)
      
      # Проверяем, что @result теперь равен 24 (12 * 2)
      expect(calculator.result).to eq(24)
    end
  end
end