Ruby on rails 如何期望'=';方法为';会话';?
我正在使用RubyonRails3.1.0和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
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
。