Функциональный тест Rails assert_select ничего не находит после записи AJAX - PullRequest
2 голосов
/ 21 февраля 2011

On Rails 2.3.2 Я пытаюсь проверить представление в функциональном тесте

def test_view
 get :form
 xhr :post, :add_to_cart, {:id => 1}
 post :create, {:param => value}
 assert_select 'title', 'Success!'
end

Но продолжайте получать ошибку:

Ожидается, что как минимум 1 элемент соответствует "title", найдено 0. не соответствует действительности.

Я понимаю, что вы не можете использовать assert_select после вызова xhr, но в этом случае я делаю это ПОСЛЕ обычного почтового запроса.

Если я отброшу запрос xhr

def test_view
 get :form
 post :create, {:param => value}
 assert_select 'title', 'Success!'
end

Тогда это работает как шарм. Я мог бы установить корзину (которую я храню в сеансе) вручную, но тогда я бы не стал проверять вид ...

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 23 января 2012

Если вы сделаете запрос xhr, @response.content_type == 'text/javascript' и assert_select не будут работать с ним.Чтобы заставить его работать, вы должны изменить тип контента на 'text/html', например:

xhr(:get, something)
@response.content_type = 'text/html'
assert_select 'title', 'Success!'
0 голосов
/ 28 января 2013

У меня была такая же проблема.Как отмечалось выше, это происходит из ActionController, устанавливающего content-type в text-javascript, в то время как assert_select работает с text/html.Хотя лучший способ установить его - это не смешивать с @response в тесте, а в контроллере, например:

respond_to do |format| 
  format.html {...}
end

Это приведет к тому, что тип содержимого будет text/html.

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

Я думаю, вы уже поняли - функциональные тесты ожидают одного действия контроллера, а не нескольких действий. Я бы предложил заменить это на интеграционный тест .

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