Как установить интеграционный тест направляющих на методы XML?

data$anim <- sapply(0, paste0,data$anim)
12
задан Daniel Rikowski 30 December 2012 в 13:53
поделиться

5 ответов

Комбинация использования формата и assert_select в интеграционном тесте работает отлично:

class ProductsTest < ActionController::IntegrationTest
  def test_contents_of_xml
    get '/index/1.xml'
    assert_select 'product name', /widget/
  end
end

Для получения дополнительной информации проверьте assert_select в документах направляющих.

12
ответ дан 2 December 2019 в 06:46
поделиться

Это - идиоматический способ протестировать xml ответ от контроллера.

class ProductsControllerTest < ActionController::TestCase
  def test_should_get_index_formatted_for_xml
    @request.env['HTTP_ACCEPT'] = 'application/xml'
    get :index
    assert_response :success
  end
end
5
ответ дан 2 December 2019 в 06:46
поделиться

Эти 2 ответа являются большими, за исключением того, что мои результаты включают поля даты и времени, которые являются гонгом, чтобы отличаться при большинстве обстоятельств, таким образом, assert_equal сбои. Кажется, что я должен буду обработать включение @response.body использование синтаксического анализатора XML, и затем сравнивает отдельные поля, число элементов, и т.д. Или есть ли более легкий путь?

1
ответ дан 2 December 2019 в 06:46
поделиться

Установите объекты запроса, принимают заголовок:

@request.accept = 'text/xml' # or 'application/xml' I forget which

Затем можно утверждать, что орган по ответу равен тому, что Вы ожидали

assert_equal '<some>xml</some>', @response.body
0
ответ дан 2 December 2019 в 06:46
поделиться

Ответ от ntalbott показывает действие get. Пост-действие немного сложнее; если вы хотите отправить новый объект в виде сообщения XML и чтобы атрибуты XML отображались в хэше params в контроллере, вы должны правильно указать заголовки. Вот пример (Rails 2.3.x):

class TruckTest < ActionController::IntegrationTest
  def test_new_truck
    paint_color = 'blue'
    fuzzy_dice_count = 2
    truck = Truck.new({:paint_color => paint_color, :fuzzy_dice_count => fuzzy_dice_count})
    @headers ||= {}
    @headers['HTTP_ACCEPT'] = @headers['CONTENT_TYPE'] = 'application/xml'
    post '/trucks.xml', truck.to_xml, @headers
    #puts @response.body
    assert_select 'truck>paint_color', paint_color
    assert_select 'truck>fuzzy_dice_count', fuzzy_dice_count.to_s
  end
end

Здесь вы можете видеть, что второй аргумент для публикации не обязательно должен быть хешем параметров; это может быть строка (содержащая XML), , если заголовки правильные. Третий аргумент, @headers, - это часть, для выяснения которой мне потребовалось много исследований.

(Обратите внимание на использование to_s при сравнении целочисленного значения в assert_select.)

5
ответ дан 2 December 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: