Как издеваться над mongodb в rspe c (новичок) - PullRequest
1 голос
/ 15 апреля 2020

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

Код, который необходимо протестировать, использует MongoDB (mongoid) и имеет шаблон, подобный следующему:

 objects = Database::MyTable.active.where(object_id: object_id).to_a

Я хочу, чтобы мой код rspe c предоставлял objects жестко закодированный в тесте. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Из-за «цепочки» методов заглушка немного неловкая, но это можно сделать.

allow(Database::MyTable).to(
 receive(:active).and_return(double(
   where: [{ id: 1 }, { id: 2 }] 
 ))
)

Мы нанесли active, чтобы вернуть макет (double) на который мы заглушаем where.

Документы: rspe c -mocks

PS: Есть много других способов написания этих заглушек, некоторые объективно лучше, некоторые субъективно лучше. Существуют также способы реорганизации вашего кода для упрощения создания заглушек.

PPS: Добро пожаловать на ruby!

0 голосов
/ 16 апреля 2020

Я бы разделил код, который извлекает данные (включая указанную вами строку), в один метод, а код, который использует / обрабатывает данные, в другой метод, а затем смоделировал весь метод поиска. Таким образом, вам не нужно гадить с точными используемыми запросами.

...