Как смоделировать массив в rSpec? - PullRequest
3 голосов
/ 31 января 2012

Я пытаюсь смоделировать массив в rspec (в приложении это объект возврата из внешнего API), но я не знаю, как.

Я пытался насмехаться так:

item = double("item")
item.stub(:[]) { :return_value }

, который работает, но тогда я получу: return_value для каждого значения в массиве. Есть ли другой способ?

1 Ответ

8 голосов
/ 31 января 2012

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

items = [:return_value1, :return_value2]

В случае, если вам нужно заблокировать метод и вернуть разные результаты для первого и последующих вызовов, вы можете сделать это:

obj.stub(:method).and_return('1', '2')

В этом случае obj.method вернет «1» при первом вызове и вернет «2» для всех последующих вызовов.

Кроме того, если вы используете блок для заглушки, вы можетединамически рассчитывать возвращаемое значение в этом блоке.Но это считается не очень хорошей практикой, потому что идиоматически заглушки должны возвращать статические данные.

obj.stub(:method) { Time.now }
...