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:本规范设计为仅适用于一个请求。