Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在rspec中打印响应正文_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何在rspec中打印响应正文

Ruby on rails 如何在rspec中打印响应正文,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试为meetings_controller.rb编写一个rspec文件,以检查从数据库返回的值是否正确 当我转到localhost:3000/meeting.json时,这是来自数据库的数据的结果 我的rspec文件正在尝试检查是否返回了正确的值 我在specs下创建了一个名为controller的文件夹(在我安装了rspec之后),并使文件满足_controller_spec.rb require 'rails_helper' # Change this ArticlesContr

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

当我转到localhost:3000/meeting.json时,这是来自数据库的数据的结果

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

我在specs下创建了一个名为controller的文件夹(在我安装了rspec之后),并使文件满足_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
顺便说一句,这是我的会议

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
这就是提出的错误 失败:

  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)>'
1)MeetingsController获取#索引返回成功响应
失败/错误:raise response.body
运行时错误:
#./spec/controllers/meeting_controller_spec.rb:10:in“block(3层)in”

如果为了调试目的而试图获取此值,则应使用
byebug
pry
gems

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

因此,将
put
替换为
byebug

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.body
enter
即可打印其值。 完成后,只需键入
c
,然后输入
enter
,即可释放控制台,继续测试


另外,有关使用byebug进行调试的详细信息,在我的例子中,我是这样做的:

require 'rails_helper'

describe SuppliersController, type: :controller do
  describe 'GET /suppliers' do
    let!(:access_token) { create :access_token }
    let!(:admin_user_token) do
      create :user_token, resource_owner: create(:admin_user)
    end

    context 'when the requester is an admin' do
      it 'returns HTTP status 200 (OK)' do
        allow(controller).to receive(:doorkeeper_token) { access_token }
        @request.env['HTTP_X_USERTOKEN'] = admin_user_token.token

        get :index

        raise response.body.inspect ## Here is what prints the value in the console.

        body = JSON.parse response.body

        expect(response).to have_http_status :ok
        expect(body['status']).to eq 'OK'
      end
    end
  end
end
要运行测试,请执行以下操作:

rspec spec/controllers/suppliers/suppliers_controller_index_spec.rb 
它给了我输出:

F

Failures:

  1) SuppliersController GET /suppliers when the requester is an admin returns HTTP status 200 (OK)
     Failure/Error: raise response.body.inspect
     
     RuntimeError:
       "{\"status\":\"OK\",\"message\":\"Your request has been processed successfully.\",\"data\":[],\"page\":{\"current_page\":1,\"prev_page\":null,\"next_page\":null,\"per_page\":25,\"total_pages\":0}}"
     # ./spec/controllers/suppliers/suppliers_controller_index_spec.rb:17:in `block (4 levels) in <top (required)>'

Finished in 0.47594 seconds (files took 2.82 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/controllers/suppliers/suppliers_controller_index_spec.rb:11 # SuppliersController GET /suppliers when the requester is an admin returns HTTP status 200 (OK)
F
失败:
1) 当请求者是管理员时,SuppliersController获取/suppliers返回HTTP状态200(OK)
失败/错误:raise response.body.inspect
运行时错误:
“{\”状态\“:\”确定\“,”消息\“:\”您的请求已成功处理。\”,\“数据\“:[],\”页面\“:{\”当前页面\“:1,\”上一页\“:null,\”下一页\“:null,\”每页\“:25,\”总页面\“:0}”
#./spec/controller/suppliers/suppliers\u controller\u index\u spec.rb:17:in'block(4级)in'
完成时间为0.47594秒(加载文件需要2.82秒)
1例,1例失败
失败的示例:
rspec./spec/controllers/suppliers/suppliers\u controller\u index\u spec.rb:11#suppliers当请求者是管理员时,controller GET/suppliers返回HTTP状态200(OK)

我不得不说,引发运行时错误以检查变量值不是一个好的做法,也许您应该尝试@DR7建议的
gem'pry'
gem'byebug'

您需要确保的另一件事是您是否在不同的环境中运行了
rails s
rspec
?这可能会导致它们连接到单独的数据库。

这是否回答了您的问题?我也试过了,但实际上不起作用。编辑我的回答您是否尝试获取此值用于调试?为什么不在其中放置断点并检查响应。答案是0.body吗?状态代码是什么?我正在使用
提升响应.body.inspect
。但这会给测试用例一个错误,因为它会引发运行时错误,但我可以在控制台中看到该值。
F

Failures:

  1) SuppliersController GET /suppliers when the requester is an admin returns HTTP status 200 (OK)
     Failure/Error: raise response.body.inspect
     
     RuntimeError:
       "{\"status\":\"OK\",\"message\":\"Your request has been processed successfully.\",\"data\":[],\"page\":{\"current_page\":1,\"prev_page\":null,\"next_page\":null,\"per_page\":25,\"total_pages\":0}}"
     # ./spec/controllers/suppliers/suppliers_controller_index_spec.rb:17:in `block (4 levels) in <top (required)>'

Finished in 0.47594 seconds (files took 2.82 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/controllers/suppliers/suppliers_controller_index_spec.rb:11 # SuppliersController GET /suppliers when the requester is an admin returns HTTP status 200 (OK)