ruby-on-rails – 使用rspec在rails上测试ruby中的会话装饰器库

我在lib / user_session.rb中有这个代码

它由我的一个控制器使用,包括UserSession.

我该怎么测试呢?我在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

最佳答案 您需要在会话中模拟或存根[]运算符.例如,在您的规范中,您可以执行以下操作:

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

要么

session.should_receive(:[]).with(:viewed)
点赞