Какой гем для сопоставителей RSpec следует использовать с Mongoid?

Кажется, есть два драгоценных камня, которые предоставляют средства сопоставления RSpec для использования с Mongoid.

Какой выбор лучше и почему?

MONGOID-RSPEC
Гем mongoid-rspec Эвана Сэгга предоставляет сопоставители RSpec для Mongoid. Включает средства сопоставления для ассоциаций, параметров, проверок и полей.
http://github.com/evansagge/mongoid-rspec

ЗАМЕЧАТЕЛЬНЫЙ-МОНГОИД
Драгоценный камень замечательного-монгоида Брайана Кардареллы предоставляет сопоставители RSpec для монгоида. Он содержит сопоставители только для Mongoid, а также все сопоставители проверки из Remarkable::ActiveModel.
http://github.com/bcardarella/remarkable_mongoid


person Daniel Kehoe    schedule 04.03.2011    source источник


Ответы (2)


Лично я не думаю, что вы должны использовать либо. Укажите поведение, которое вы ожидаете от своего кода, а не реализация, и ваши спецификации станут намного более содержательными.

Что произойдет, если вы решите перейти с Mongoid на MongoMapper? Или вернуться к ActiveRecord? Вы должны выбросить большую часть своего набора тестов и переписать его.

Все эти библиотеки направляют вас на тестирование, ориентированное на разработку, что является полной противоположностью BDD/TDD.

person dnch    schedule 04.03.2011
comment
Можете ли вы предоставить альтернативу? Вы предлагаете полностью отказаться от rspec и использовать огурец? Я спрашиваю, потому что переключить приложение с mongo на mysql и снова использовать активную запись - это боль. - person okysabeni; 16.10.2013
comment
Я хочу сказать, что вам, вероятно, следует просто придерживаться голых костей RSpec, а не каких-либо конкретных расширений. Ваша спецификация и общедоступный API должны (в идеале) не зависеть от технологии. - person dnch; 17.10.2013

Преимущество замечательного монгоида также, к сожалению, является его недостатком. Идея заключалась в том, чтобы использовать сопоставители Remarkable ActiveModel для валидаторов. Для этого требуется альфа-версия Remarkable 4.0. Хотя Remarkable является библиотекой очень высокого качества, она также не подвергалась изменениям с июня прошлого года. Это огромная проблема с моей библиотекой, основная зависимость не выходит из альфы уже более 8 месяцев! Я связался с несколькими разработчиками и ни от одного из них не получил ответа.

Что касается того, какая из двух библиотек лучше, беглый взгляд на README кажется, что mongoid-rspec имеет больше возможностей. Тем не менее, я никогда не использовал его и не могу говорить о каком-либо опыте с ним.

При всем этом, если быть совершенно честным (хотя я написал одну из библиотек), я думаю, что и то, и другое — полная ерунда. К сожалению, должен был начать этот бесполезный стиль тестирования подтверждений и ассоциаций, и все последовали его примеру. (включая меня) Практически в каждом случае написание теста — это просто дублирование усилий по написанию фактического кода. Вы вообще ничего не тестируете. В лучшем случае их можно будет увидеть при проверке на вменяемость. В худшем случае это пустая трата времени.

Я предлагаю утвердить поведение в разных частях набора тестов.

person bcardarella    schedule 04.03.2011
comment
Очень откровенный ответ, спасибо! И познавательно. Вы предлагаете вместо этого писать сценарии Cucumber? Это то, что вы имеете в виду, говоря о поведении в разных частях набора тестов? - person Daniel Kehoe; 04.03.2011
comment
Ну, использовать эти сопоставители бесполезно, потому что вы добавляете функциональность без какого-либо контекста. Например, вы должны добавлять связь между двумя моделями только тогда, когда этого требует ваш код. Когда ваше приложение попытается использовать эту ассоциацию из-за теста, оно потерпит неудачу. Затем вы добавляете ассоциацию, чтобы выполнить тест. Таким образом, у вас будет гораздо более гибкая тестовая среда. Если вы полагались на сопоставители типа Shoulda, вы в конечном итоге получили эту сверххрупкую тестовую среду. Вы должны писать код, а не бороться с набором тестов. - person bcardarella; 04.03.2011
comment
Брайан. Я согласен на 100 % в отношении ассоциаций, но я видел, как проверяющие сопоставители ведут себя в спецификации (сообщения об ошибках и т. д.). Без спецификаций валидации, как вам нравится реализовывать валидации? - person David Chelimsky; 04.03.2011
comment
@dave Я все еще думаю, что многие из программ проверки соответствия слишком тесно связаны с выбранным ORM. Действительно ли подтверждение сообщения об ошибке определяет поведение? - person bcardarella; 04.03.2011