使用Rspec,我正在尝试构建一个测试一些基本http请求的规范。我在某个地方犯了一个新手的错误,需要帮助找到它。
我故意让规范以无意义的方式失败,所以错误信息会告诉我我得到了什么 - 一旦我解决了问题,我就会纠正这个期望:
user = create(:member)
json_data = {email: user.email, password: user.password}.to_json
post "api/v1/users/sign_in", json_data, format: :json
expect(last_response.body).to eq "foobar"
api / v1 / users / sign_in路由到以下控制器:
class API::V1::SessionsController < Devise::SessionsController
respond_to :json
def create
render text: params
end
end
这给出了错误:
预期:“foobar” 得到:“{\”{{\“”email \\“:\\”7abdiel_roob@smithrau.biz \\“,\\”password \\“:\\”12345678 \\“} \”=&gt; nil, \“action \”=&gt; \“create \”,\“controller \”=&gt; \“api / v1 / sessions \”}“
好的。我的数据到达服务器,服务器将其发回,这就是我想要的。在下一步中,我尝试抓住电子邮件。我将控制器更改为
class API::V1::SessionsController < Devise::SessionsController
respond_to :json
def create
render text: params[:email]
end
end
我得到了
预期:“foobar” 得到了:“”
我向我看来,params哈希使用我在请求中发送的JSOn数据作为密钥的名称,而不是实际值。或者这可能是一个强烈的事情?我尝试了很多东西,似乎无法从params对象中提取出我想要的数据。
答案 0 :(得分:1)
正在发生的事情是您正在对您在规范中发送的JSON数据进行双重编码。
json_data = {email: user.email, password: user.password}
post "api/v1/users/sign_in", json_data, format: :json
RSpec会自动将请求正文编码为JSON。