2013-05-27 3 views
1

Недавно я перенес одну из своих моделей из самодельной (основанной на родителя) древовидной структуры в ancestry gem, и у меня есть ошибка контроллера для действия new. Линия вопрос:Тестирование методов атрибутов с помощью RSpec Rails

assigns(:category).should be_a_new(Category).with(parent_id: root_category.id)

Однако он жалуется, что нет атрибута parent_id и на самом деле это не так parent_id теперь метод. Как мне изменить приведенную выше строку, чтобы проверить как новую категорию, так и category.parent_id == root_category.id?

ответ

1

Вместо «parent_id» вы можете использовать имя столбца, которое использует ancestry для хранения идентификатора родителя, который по умолчанию является «родословной». Вы можете изменить имя, установив его как опцию метода класса has_ancestry, например. has_ancestry(ancestry_column: :parent_id).

Измененная тестовый код будет выглядеть следующим образом:

assigns(:category).should be_a_new(Category).with(ancestry: root_category.id.to_s) 
+0

Однако я заметил, что для subsubcategories столбец родословной выглядит примерно так: «6/8» ... Предпочтительный метод должен был бы протестировать метода возвращаемое значение, если это возможно. – janosrusiczki

+0

Thats true, но RSpec :: Rails :: Matchers :: BeNew # работает только с атрибутами. Я думаю, вам нужно разделить оператор на 2 строки 'assigns (: category) .should be_a_new (Category)' и 'присваивает (: category) .parent_id.should eq root_category.id' или вы пишете собственный пользовательский матчи, работающий с методами , – dan

+0

Бинго! Я искал эту вторую строчку, и я также буду изучать персонализированные шаблоны. Благодаря! – janosrusiczki

Смежные вопросы