rspec rails mocking会话哈希

Ada*_*m T 8 rspec ruby-on-rails rspec2

我试图模拟控制器的会话哈希,如下所示:

it "finds using the session[:company_id]" do
  session.should_receive(:[]).with(:company_id).and_return 100
  Company.should_receive(:find).with(100)
  get 'show'
end
Run Code Online (Sandbox Code Playgroud)

当我打电话给'show'时,它说:

received :[] with unexpected arguments  
expected: (:company_id)  
   got: ("flash")
Run Code Online (Sandbox Code Playgroud)

控制器代码如下所示:

def show
  company_id = session[:company_id]
  @company = Company.find params[company_id]
end
Run Code Online (Sandbox Code Playgroud)

我也只是尝试过设置

it "finds using the session[:company_id]" do
  session[:company_id]= 100
  Company.should_receive(:find).with(100)
  get 'show'
end
Run Code Online (Sandbox Code Playgroud)

但后来得到一个问题:

expected: (100)
got: (nil)
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

stu*_*rtc 5

我刚遇到这个。我无法使should_receive不干扰Flash内容。

但这让我测试了我想要的行为:

it "should redirect to intended_url if set" do
  request.env['warden'] = double(:authenticate! => true)
  session.stub(:[]).with("flash").and_return double(:sweep => true, :update => true, :[]= => [])
  session.stub(:[]).with(:intended_url).and_return("/users")
  post 'create'
  response.should redirect_to("/users")
end
Run Code Online (Sandbox Code Playgroud)

希望有帮助...


shi*_*ara -1

这是因为您从控制器获取闪存会话。所以定义它。Flash 保存在会话中。

it "finds using the session[:company_id]" do
  session.stub!(:[]).with(:flash)
  session.should_receive(:[]).with(:company_id).and_return 100
  Company.should_receive(:find).with(100)
  get 'show'
end
Run Code Online (Sandbox Code Playgroud)