13.2. Блочное тестирование моделей
Первая созданная в приложении Depot модель относилась к товарам и называ¬лась Product (см. раздел 6.1). Взглянем, что же интересного в области тестирова¬ния Rails сгенерировала в файле test/unit/product_test.rb при создании этой модели.
13.1. Тесты выпекаются внутри самого продукта
В условиях ускоренного и свободного программирования, в которых создавалось приложение Depot, могло показаться, что тестированию в Rails уготована второго плана. Это чистейшей воды заблуждение.
Чем заняться на досуге
Вот несколько заданий, которые вы можете попробовать выполнить самое тельно.
• Внесите изменения в первоначальное отображение каталога (действие i nd в контроллере магазина — store), чтобы по запросу клиента выдавал-XML-версия каталога товаров.
12.2. Завершение работы
Процесс программирования завершен, но перед тем, как запустить приложение! в эксплуатацию, мы можем кое-что привести в порядок.
Автогенерация XML-ответа
•§жедыдущем примере мы генерировали XML-ответы вручную, используя rxml-юн. Этот способ позволял управлять порядком возвращаемых элементов. | если этот порядок не имеет значения, можно разрешить Rails генерировать . для объекта модели за нас, вызвав метод модели to_xml.
Другой способ запроса XML-содержимого
Хотя «официальным» HTTP-способом определения типа востребуемого сод жимого является использование Accept-заголовка, направить этот заголовок вашего клиента удается не всегда. Rails предоставляет альтернативный сп мы можем направить сведения о предпочтительном формате в качестве сое ляющей части URL.
Соответствующий тип ответа
Запрос поступает в Rails-приложение с использованием HTTP-протокола. HTTP-сообщение состоит из нескольких заголовков и (не обязательно) из некотороп» количества данных (таких, как POST-данные, полученные из формы). Одним i
REST-интерфейса
Теперь нужно создать шаблон, который вернет XML-документ тому, кто об-рвтлся с запросом. Это можно сделать, воспользовавшись теми же шаблонами чШаЛ. которые использовались для формирования изображения веб-страниц, но есть два более подходящих для этого способа. В первом используются rxml-шаб-лвшы.
Навигация по таблицам
На рис. 12.1 показано, как заказы (orders) вписываются в существующую crpyi туру базы данных. Каждый заказ имеет номер записи товара (1 i ne_i tem), a i дая запись товара связана с товаром (product).
12.1. Генерация XML-материала
яовим на наше приложение REST-интерфейс. REST означает Representational ; Transfer, то есть передача репрезентативного состояния, в чем довольно труд-| тзовить некий смысл. Истинное значение заключается в использовании глаго HTTP (GET, POST, DELETE и т. д.) для обмена запросами и ответами меж-' приложениями.