Тестирование очистки значений cookie в Rails? - PullRequest
2 голосов
/ 30 мая 2009

Как мне отправить куки в функциональном тесте? Как мне проверить, что куки очищены?

Я имел большой успех, используя TDD для построения моделей для Rails-приложения, но столкнулся с трудностями при тестировании контроллера: я могу установить значения cookie один раз в тесте и прочитать их, но не могу очистить их. То есть:

test "clears cookie" do
  get :set_it, :stuff => {'key' => 'value'} # stuff to cookify
  assert cookies['key'] == 'value' # works fine

  get :clear_it # cookie doesn't get sent. How do I simulate this?
  assert nil == cookies['key'], 'Cookie not cleared' # fails
end

В руководстве по тестированию рельсов не упоминается, как имитировать отправку куки в тесте, а только как проверить, что данные были установлены на сервере. Я знаю, что раньше сталкивался с ситуацией, когда данные cookie не изменяются на сервере до отправки ответа. Это то, что здесь происходит? Я бы надеялся, что функциональные тесты сделают лучше «быть клиентом».

Это широко известная проблема? Люди просто смиряются с использованием JUnit для такого рода вещей? Я бы очень хотел иметь возможность использовать один фреймворк для всех или почти всех моего tdd.


Чистое отчаяние и догадки заставили меня с оптимизмом попробовать @ response.cookies, но это тоже не сработало.

Ответы [ 2 ]

2 голосов
/ 08 ноября 2010

Если вы хотите провести модульный тест специально для удаления cookie, то вы фактически тестируете, содержит ли ответ заголовок, который не устанавливает cookie в ничего. Я предполагаю, что ваш get :clear_it делает cookies.delete :cookie-name . Это устанавливает в response.header значение Set-[COOKIE-NAME]=;. Так что, если другие методы не работают, вы можете просто искать эту строку напрямую.

Что выглядит подозрительно в вашем коде, так это то, что вы просто проверяете cookies напрямую. Куда идет ответ на ваш запрос «get»?

Если все остальное в случае неудачи, вы также можете использовать интеграционные тесты с webrat, как обсуждено здесь . Это может быть не так хорошо, как модульное тестирование, но, по крайней мере, проверит его функциональность.

1 голос
/ 03 июня 2009

Мой тест на выход из системы был

assert_nil @response.cookies["auth_token"]

который работает.

Какое значение вы получаете, если не ноль?

...