Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么不是';t';参数';是否在控制器规范中的请求之间清除?_Ruby On Rails_Ruby_Rspec_Parameters_Controller - Fatal编程技术网

Ruby on rails 为什么不是';t';参数';是否在控制器规范中的请求之间清除?

Ruby on rails 为什么不是';t';参数';是否在控制器规范中的请求之间清除?,ruby-on-rails,ruby,rspec,parameters,controller,Ruby On Rails,Ruby,Rspec,Parameters,Controller,我有以下代码: let(:params) do { customer: { email: 'testing@mailinator.com', confirmation_number: "12345" } } end it 'does something' do post :create, params: params get :show, params: { cache_key: 1 } expect(something).to be

我有以下代码:

let(:params) do
  {
    customer: {
      email: 'testing@mailinator.com',
      confirmation_number: "12345"
    }
  }
end

it 'does something' do
  post :create, params: params
  get :show, params: { cache_key: 1 }
  expect(something).to be_truthy
end
show
操作接收
:params
而不带
:customer
键,但当此规范运行时,
params
包含
post
请求中发送的内容以及
get
请求中发送的内容


为什么会发生这种情况?我如何使Rspec模拟请求之间的真实行为(关于
参数的内部内容)?

控制器规范-控制器规范是用于Rails功能测试的Rspec包装。它允许您在每个示例中模拟单个http请求,然后指定预期结果

请求规范-请求规范为Rails的集成测试提供了一个薄薄的包装,并设计用于在整个堆栈中驱动行为,包括路由(由Rails提供)和无存根(由您决定)


因此,如果您想测试API控制器,我建议您在测试单个请求时使用控制器规范。

我认为“params”有时是一个保留关键字-您尝试过使用其他变量名称吗?我尝试过,行为是一样的。也许试着在你的post和get请求之间显式地将其设置为nil?我觉得它们必须作为两个独立的测试来编写……我知道这会解决问题,但我的观点是我不应该这样做。如果参数以非实际方式附加,如何正确测试控制器。真正的问题是为什么会发生这种(违反直觉的)事情。然后,如果rspec中有一个配置(因为我希望在我的所有控制器测试中都有这个配置,而不必手动修补它们中的每一个);DR:本规范设计为仅适用于一个请求。