Тестирование действия AJAX create с использованием Test :: Unit (JQuery) - PullRequest
0 голосов
/ 25 февраля 2011

Мои tasks методы CRUD все в настоящее время выполняются через ajax, и я хотел бы протестировать эту функциональность, используя Test :: Unit. Это возможно?

Я следую в книге Agile Web Development с Rails, и есть ссылка на тест, который тестирует аналогичную функциональность (но с Prototype).

test "should create line_item" do 
  assert_difference('LineItem.count') do
    post :create, :product_id => products(:ruby).id
  end

  assert_redirected_to store_path
end

Я изменил это следующим образом:

test "should add task via ajax" do
  assert_difference "Task.count" do
    xhr :post, :create, :task => tasks(:one)
  end
end

Ошибка, которую я продолжаю получать:

ActionView::Template::Error: undefined method '<=' for nil:NilClass

Итак, моя первая попытка - посмотреть, где это ловится. Он находится в моем файле create.js.erb, где у меня есть логика, в которой я выясняю, где новая задача принадлежит в секционированном списке всех задач.

<% if @task.due_date <= Date.today %>
  var id = "#tasks_today";
  var desc = null;
<% end %>
...if statements continue...

Итак, я предполагаю, что @task не передается в create.js.erb, когда сам тест проходит, но когда я вручную тестирую, все работает отлично. Вот мой контроллер:

respond_to :js

def create
  @task = current_user.tasks.new(params[:task])

  if @task.save
    respond_with(@task)
  end
end

Тест :: Модуль не создан для тестирования с Jquery? Будет ли это работать только с прототипом? Я делаю это совершенно неправильно?

1 Ответ

0 голосов
/ 25 февраля 2011

Проблема в том, что due_date для вашего экземпляра @task равно nil, и этот случай не обрабатывается.Попробуйте изменить код на

<% if @task.due_date.present? && @task.due_date <= Date.today %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...