Как вы пишете функциональный тест / тест контроллера для проверки контента, добавляемого через вызов AJAX? - PullRequest
1 голос
/ 05 апреля 2009

Тест

def test_generateCashFlowStmt
    get :getDateRangeForCashFlowStmt
    xhr :post,
      :generate_cash_flow_stmt, 
      {:fromDate =>  {:year=>"2009", :month => "3", :day=>"1"},
      :toDate => {:year=>"2009", :month => "3", :day=>"31"} }

    table = [ ....       ]
    assert_equal table, formatCashFlowStatementAsTable( assigns(:cashFlowStmt))
    assert_tag :tag => "div", :children => {:count => 1, :only => {:tag=>"table"} }
  end

Действие контроллера

def generate_cash_flow_stmt
      puts params
      fromDate = Date.civil params[:fromDate]["year"].to_i, params[:fromDate]["month"].to_i, params[:fromDate]["day"].to_i
      toDate = Date.civil params[:toDate]["year"].to_i, params[:toDate]["month"].to_i, params[:toDate]["day"].to_i 

      @cashFlowStmt = CashFlowStatement.new(fromDate, toDate)
      render :partial => "cash_flow_stmt", :layout => false
  end

View

<% form_remote_tag(:loading => "Element.show('progress-indicator');",
        :update => "div_results",
        :complete => "Element.hide('progress-indicator');",
        :url=>{:action=>'generate_cash_flow_stmt'}) do %>
...
<% end %>
<div id="div_results">

Тест завершается неудачно при последней проверке, где я проверяю, заполнен ли держатель содержимого div таблицей в результате вызова доступа generate_cash_flow_stmt. Хотя я вижу, что таблица отображается в браузере, в действии «Просмотр источника» отображается пустой тег div. Что дает?

Ответы [ 2 ]

1 голос
/ 06 апреля 2009

Ожидается вид источника с пустым div. AJAX-вызовы обновляют домен, но не меняют первоначальный источник. Вы можете лучше всего просмотреть DOM, используя Firebug .

Что касается теста: вызов xhr :post не вызовет Ajax.Updater и, следовательно, фактически не обновляет div страницы. (Ajax.Updater - это то, что генерирует вызов xhr. При инициировании вызова вручную в тесте такого события не происходит.) Я также не верю, что функциональные тесты фактически отслеживают и обновляют DOM или выполняют JavaScript.

Чтобы пройти проходной тест, вы должны сгенерировать только запрос xhr (не делайте get :getDateRangeForCashFlowStmt), а затем подтвердить, что он возвращает соответствующую частичку. Поскольку Rails & Prototype хорошо протестированы, вы должны полагаться на то, что form_remote_tag и Ajax.Updater сделают то, что они должны, и создадут вашу последнюю страницу.

0 голосов
/ 06 апреля 2009

Вы не хотите тестировать JavaScript в своих функциональных тестах. Функциональные тесты вообще не охватывают javascript.

Вы можете использовать что-то вроде Selenium для тестирования вашего javascript. Selenium - это в основном тесты, которые пытаются делать что-то в браузерах. И браузеры, как известно, поддерживают JavaScript намного лучше, чем функциональные тесты Rails; )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...