我在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
答案 0 :(得分:1)
就我从你的代码中看到的那样,你不依赖于会话,因为你依赖于一个符合括号阅读器形式的基本界面的对象。
现在,我自己不使用RSpec,所以我不能确切地说在这种情况下如何使用它,但是我创建了一个带有括号读取器实例方法的模拟类,甚至是哈希然后测试那个对象,例如
fake_session = { :viewer => nil }
class << fake_session
include UserSession
end
assert_equal [], fake_session.viewer
希望有所帮助。
答案 1 :(得分:1)
您需要在会话中模拟或存根[]运算符。例如,在您的规范中,您可以执行以下操作:
session.stub!(:[]).and_return "foo"
或
session.should_receive(:[]).with(:viewed)