首页 > 解决方案 > 我们如何在 rspec 中打印响应正文

问题描述

我正在尝试为我的 meeting_controller.rb 编写一个 rspec 文件,以检查从我的数据库返回的值是否正确。

当我转到 localhost:3000/meeting.json 时,这是我从数据库中获取数据的结果

在此处输入图像描述

我的 rspec 文件正在尝试检查是否返回了正确的值。

我在规范下创建了一个名为控制器的文件夹(在我安装了 rspec 之后)并拥有文件 meeting_controller_spec.rb

require 'rails_helper'

# Change this ArticlesController to your project
RSpec.describe MeetingsController, type: :controller do

    describe "GET #index" do
        # check index
        it "returns a success response" do
            get :index
            puts response.body
            expect(response).to have_http_status(:ok)
            
        end

    end
end

我试图打印响应正文,但没有返回任何内容。有没有办法做到这一点?

(base) adam-a01:reservation adrianlee$ rspec

.

Finished in 0.0892 seconds (files took 12.15 seconds to load)
1 example, 0 failures

顺便说一句,这是我的 meeting_controller.rb

class MeetingsController < ApplicationController
  before_action :set_meeting, only: [:show, :edit, :update, :destroy]

  # GET /meetings
  # GET /meetings.json
  def index
    @meetings = Meeting.all
    @meeting = Meeting.new

  end
end

更新:我也尝试了下面建议的这种方法,但它仍然不起作用

# Change this ArticlesController to your project
RSpec.describe MeetingsController, type: :controller do

    describe "GET #index" do
        # check index
        it "returns a success response" do
            get :index
            raise response.body 
            expect(response).to have_http_status(:ok)
            
        end

    end
end

这是引发的错误失败:

  1) MeetingsController GET #index returns a success response
     Failure/Error: raise response.body
     RuntimeError:
     # ./spec/controllers/meeting_controller_spec.rb:10:in `block (3 levels) in <top (required)>'

标签: ruby-on-railsruby

解决方案


如果您出于调试目的尝试获取此值,则应使用byebugprygems。

如果您选择 byebug,请将其添加到gem 'byebug'测试环境中的 gemfile 中。运行bundle install,然后你就可以在你的测试中使用它

所以替换putsbyebug

describe "GET #index" do
   # check index
   it "returns a success response" do
     get :index
     byebug
     expect(response).to have_http_status(:ok) 
       
   end

end

现在在控制台上,您就在那里。只需键入response.bodyenter打印它的值。完成后,只需键入c然后enter释放控制台 e 继续您的测试。

可以在此处查看有关使用 byebug 进行调试的更多信息


推荐阅读