Я думаю, вам не нужно создавать тестовые двойники для массива, они добавят ненужное усложнение кода ваших тестов. Вы можете просто создать поддельный массив и использовать его позже:
items = [:return_value1, :return_value2]
В случае, если вам нужно окурок метод и возвращать разные результаты для первого и последующих вызовов, вы можете сделать это:
obj.stub(:method).and_return('1', '2')
В этом case obj.method
вернет '1', когда он будет вызван в первый раз, и вернет '2' для всех последующих вызовов.
Кроме того, насколько вы используете блок для заглушки, вы можете динамически вычислять возвращаемое значение в этом блоке. Но это считается не очень хорошей практикой, потому что идиоматично заглушки должен возвращать статические данные.
obj.stub(:method) { Time.now }
Я знаю, что решение заключается в том, чтобы обернуть возвращаемый объект из API в оболочку, а затем издеваться над ним, но я пытаюсь его избежать. – Indigon