Rails / Rspec Stubs: указание порядка и пр. - PullRequest
2 голосов
/ 25 мая 2011

Мне удобно создавать базовые заглушки, но я немного озадачен тем, как указывать такие вещи, как порядок (и его изменение) и т. Д.

Чтобы привести конкретный пример, вот строка в моем контроллеречто я пытаюсь проверить:

@courses = Course.order('created_at').reverse

В моей спецификации контроллера заглушка (очевидно, неудачная):

  Course.stub(:all) { [mock_course] }

... и ошибка rspec:

  Failure/Error: assigns(:courses).should eq([mock_course])

       expected [#<Course:0x818614e8 @name="Course_1001">]
            got [#<Course id: 2, name: "Second test course", price: #<BigDecimal:1030e73c0,'0.4995E2',18(18)>]

Несмотря на то, что это был неточный тест (не тестирование заказа), я бы предположил, что спецификация пройдет успешно.Это не так - это вытащить из базы данных, а не издеваться.Так ... я думаю, что я спрашиваю, как я заглушаю Course.order ('made_at'). Reverse?

Большое спасибо ...

1 Ответ

2 голосов
/ 25 мая 2011

Вы предполагаете, что ActiveRecord будет вызывать Course.all в какой-то момент, что может быть не так.

Попробуйте это:

Course.stub_chain(:order, :reverse) { [mock_course] }

Чтобы избежать необходимости выполнять цепную заготовку, вы можете переместить код ActiveRecord в вашу модель, чтобы у контроллера было что-то более простое, например:

Course.all_by_newest_first
...