【问题标题】:response.body in Rspec controller test returns an empty stringRspec 控制器测试中的 response.body 返回一个空字符串
【发布时间】:2016-07-30 16:29:21
【问题描述】:

我正在尝试使用 Devise gem 在 Rails 中构建一个安静的 JSON api,我有以下代码:

users_controller_spec.rb:

require 'rails_helper'

RSpec.describe Api::V1::UsersController, type: :controller do

    describe "PUT/PATCH #update" do
    render_views
    context "when is successfully updated" do

      before(:each) do
        @user = FactoryGirl.create :user
        request.headers['Authorization'] = @user.auth_token
      end

      it "renders the json representation for the updated user" do
        user_response = json_response
        expect(user_response[:email]).to eq "newmail@example.com"
      end
  end
end

我遇到的问题是 response.body 等于一个空字符串,这不是有效的 JSON,因此我不能这样做 JSON.parse(response.body)

我在 SO 的其他地方阅读了包含 render_views 的内容,您可以看到我已经这样做了,但这没有任何区别。

如果您需要更多信息,请告诉我

【问题讨论】:

  • 响应成功了吗?打印response.status。也可以在解析body之前加上expect(response).to be_success
  • 你可能忘记使用render json:方法
  • 我的应用程序控制器的create 方法中有render json:...
  • 好的,我在您包含的代码中的任何地方都没有看到JSON.parse(response.body)...这意味着您没有包含所有相关代码。您能否编辑您的问题并包含所有相关代码?没有控制器的实际代码,我们不能只调试一半(规范)。

标签: ruby-on-rails ruby json rspec devise


【解决方案1】:

在我的情况下,结果是由于我没有登录用户而引发了空白正文的权限错误。首先检查您的响应是否成功。

【讨论】:

    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    相关资源
    最近更新 更多