我有以下代码:
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模仿请求之间的真实行为(关于params
内部的内容)?
答案 0 :(得分:0)
控制器规范 - 控制器规范是Rails功能测试的RSpec包装器。它允许您在每个示例中模拟单个http请求,然后指定预期结果
请求规范 - 请求规范提供了一个围绕Rails集成测试的瘦包装器,旨在通过完整堆栈驱动行为,包括路由(由Rails提供)并且没有存根(这取决于你)。
因此,如果您想测试API控制器,我建议您在测试单个请求时使用Controller规范。