Тестирование lib декоратора сессий в ruby ​​на рельсах с помощью rspec - PullRequest
4 голосов
/ 27 апреля 2009

У меня есть этот код в lib / user_session.rb

Используется одним из моих контроллеров через пользовательский сеанс.

Как я могу это проверить? Я добавил тесты в spec / lib / user_session.rb, но код основан на сеансе, который я не знаю, как издеваться.

module UserSession
  def viewed
    session[:viewed] ||= Array.new
    return session[:viewed]
  end

  def viewed_add(id, name)
    if viewed.select{|b| b[:id] == id}.empty?
      session[:viewed] << {:id => id, :name => name}
    end
    return session[:viewed]
  end

  def viewed_delete(id)
    unless id.nil?
      session[:viewed].delete_if{|b| b[:id] == id}
      return session[:viewed]
    end
  end
end

Ответы [ 2 ]

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

Вам необходимо смоделировать или заглушить оператор [] в сеансе. Например, в вашей спецификации вы можете сделать:

session.stub!(:[]).and_return "foo"

или

session.should_receive(:[]).with(:viewed)
1 голос
/ 29 апреля 2009

Насколько я вижу из вашего кода, вы полагаетесь не столько на сессию, сколько на объект, соответствующий базовому интерфейсу в форме считывателя скобок.

Теперь я сам не использую RSpec, поэтому не могу точно сказать, как его использовать в этом сценарии, но я бы создал фиктивный класс с методом экземпляра считывателя скобок или даже хеш, а затем проверил этот объект, например

fake_session = { :viewer => nil }
class << fake_session
  include UserSession
end
assert_equal [], fake_session.viewer

Надеюсь, это поможет.

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