Ruby on rails 如何期望'=';方法为';会话';?

Ruby on rails 如何期望'=';方法为';会话';?,ruby-on-rails,ruby,ruby-on-rails-3,rspec,rspec2,Ruby On Rails,Ruby,Ruby On Rails 3,Rspec,Rspec2,我正在使用RubyonRails3.1.0和rspecRails2gem。我想测试一些会话数据是否已设置为nil 在我的控制器中,我有: def create ... session[:user] = nil ... end 在相关的spec文件中,我想做如下操作: it "should be set to nil" do # Here I would like to expect if the 'session[:user]' is set to 'nil' # NOT

我正在使用RubyonRails3.1.0和
rspecRails2
gem。我想测试一些
会话
数据是否已设置为
nil

在我的控制器中,我有:

def create
  ...
  session[:user] = nil
  ...
end
在相关的spec文件中,我想做如下操作:

it "should be set to nil" do
  # Here I would like to expect if the 'session[:user]' is set to 'nil'
  # NOT using this approach:
  #
  #   session[:user].should be_nil
  #
  # That is, I would be sure that the 'session[:user] = nil' runs the same way
  # I may do with method "expectation". For example:
  #
  #   mock_model(User).should_receive(:find).and_return(nil)
  #
  # Maybe a solution can be similar to this (note: of course, the following
  # doesn't work):
  #
  #   session[:user].should_receive(:"=").and_return(nil)

  post :create, { ... }, { ... }

  ...
end
可能吗?如果是,怎么做?

我想用这种方法来检查一些特定的内部行为


更新。。。我如何测试以下内容

session[:user][:nested_key] = nil

您正在寻找的方法是
[]=

session.should_receive(:[]=).with(:user, nil)
然而,这对我来说真的很有侵略性。并不是说我永远不会这么做,但我想问你为什么不想测试结果

session[:user] = 37
post :create # ...
session[:user].should be_nil

如果我必须测试下面的东西呢<代码>会话[:用户][:嵌套的_键]。旁白:你说:“[…]为什么你不想测试结果?”这是出于安全考虑。OT:嗨,大卫,你的RSpec书的忠实粉丝,只是说声‘嗨’!您可以执行类似于让
:[]
返回模拟对象的操作。或者使用
存根链
。但正如@david所说,我建议只检查结果,因为通常情况下,它不应该被设置为
nil