Не могу использовать flash в ActionView :: TestCase, когда я хочу проверить свой вспомогательный класс - PullRequest
2 голосов
/ 27 октября 2010

Я хотел протестировать метод в своем классе помощников, но когда я что-то вроде:

require 'test_helper'

class ApplicationHelperTest < ActionView::TestCase
  def test_flash_messages
    flash[:notice] = "Hello World"
    assert_equal "<div class=\"message-notice\">Hello World<\/div>", flash_messages
  end
end

, я получаю "NoMethodError: неопределенный метод` flash 'для nil: NilClass "

Но когда я делаю что-то вроде:

flash = {}
flash[:notice] = "Hello World"
assert_equal "<div class=\"message-notify\">Hello World<\/div>", flash_messages

я получаю то же сообщение об ошибке, но оно вызывается в "application_helper.rb: 6: in` flash_messages '"

Кстати, мойapplication_helper выглядит следующим образом:

module ApplicationHelper

  def flash_messages
    fl = ''
    flash.each do |key,msg|
      if flash[key]
        fl = fl + "<div class=\"message-#{key}\">#{msg}</div>"
      end
      flash[key] = nil
    end
    return fl
  end

end

Это работает на веб-сайте, но я хочу иметь возможность протестировать этот метод с модульным тестом.

Ответы [ 2 ]

0 голосов
/ 01 августа 2018

Просто определите метод flash как заглушку в вашем тесте:

class ApplicationHelperTest < ActionView::TestCase
  def flash
    @flash ||= {}
  end

  def test_flash_messages
    flash[:notice] = "Hello World"
    assert_equal "<div class=\"message-notice\">Hello World<\/div>", flash_messages
  end
end
0 голосов
/ 27 октября 2010

Вы можете использовать flash[:notice] только в своих контроллерах для их установки и в ваших представлениях для их рендеринга. Вспышка объявлена ​​в ActionController::Flash.

Когда вы создаете свой собственный Flash Hash (flash = {}), он работает нормально, но эта переменная flash никак не доступна вашему помощнику, поэтому снова возникает ошибка.

Если вы хотите правильно протестировать ваши флеш-сообщения, я предлагаю вам написать тест с помощью такого инструмента, как Cucumber: выполнить действие и ожидать увидеть какой-нибудь текст в ответе HTML. Работает отлично.

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