Rspec GET 请求未正确从数据库返回值

Rspec GET request not correctly returning values from database

我正在为一个 API 编写测试,它应该通过 GET 请求从数据库 (PostreSQL) 发送信息。 但是我的 RSpec GET 请求拒绝 return 任何值。

这是测试:

describe FullTextController do
  context 'when doing a simple search', :type => :request do
    it 'return the correct results' do
      create(:etablissement, nom: "foobarcompany")
      create(:etablissement, nom: "foobarcompany2")
      create(:etablissement, nom: "foobarcompany3")
      create(:etablissement, nom: "foobarcompany4")
      sleep 2
      get "/full_text/:id", :params => { id: 'foobarcompany' }

      expect(body_as_json).to match({
        total_results: 1,
        total_pages: 1,
        per_page: 10,
        page: 1,
        etablissement: 1,
        })
    end
  end

应该测试这个控制器:

class FullTextController < ApplicationController
  def show

    page = params[:page] || 1

    search = Etablissement.search do
      fulltext params[:id]
      paginate page: page, per_page: 10
    end

    results = search.results

      results_payload = {
        total_results: search.total,
        total_pages: results.total_pages,
        per_page: results.per_page,
        page: page,
        etablissement: results
      }

      render json: results_payload, status: 200
    end
  end

  def full_text_params
    params.permit(:id, :page)
  end
end

来自 config/routes.rb 的路线:

Rails.application.routes.draw do
  get 'siret/:id' => 'siret#show'
  get 'full_text/:id' => 'full_text#show'
end

测试的输出:

       expected {"total_results"=>0, "total_pages"=>0, "per_page"=>10, "page"=>1, "etablissement"=>[]} to match {:total_results=>1, :total_pages=>1, :per_page=>10, :page=>1, :etablissement=>1}
   Diff:
   @@ -1,6 +1,6 @@
   -:etablissement => 1,
   -:page => 1,
   -:per_page => 10,
   -:total_pages => 1,
   -:total_results => 1,
   +"etablissement" => [],
   +"page" => 1,
   +"per_page" => 10,
   +"total_pages" => 0,
   +"total_results" => 0,

应该至少找到 1 个结果,但一直显示为零。 我已经检查过我在正确的测试数据库上,并且创建的模型(etablissement)在数据库中。

get 调用应遵循以下结构:full_text/:id,其中 :id 部分替换为您要传递的实际 id。 Rails 会将 id 部分视为控制器中的参数。从 url 的角度来看,它实际上不是参数(参数是跟在后面的?,比如 ?param1=value1&param2=value2

你在这里做的是 get "/full_text/:id", :params => { id: 'foobarcompany' } 转换成 /full_text/:id?id=foobarcompany

您想改用 get "/full_text/foobarcompany"