Rspec GET-запрос неверно возвращает значения из базы данных

Я пишу тесты для API, который должен отправлять информацию из базы данных (PostreSQL) из запроса GET. Однако мой запрос RSpec GET отказывается возвращать какие-либо значения.

Это тест:

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/rout.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) были в базе данных.

1 ответ

Решение

Вызов get должен иметь следующую структуру: full_text/:id с :id часть заменяется фактическим id Вы хотите пройти. Rails рассмотрит id часть как params в контроллере. Это на самом деле не парам с точки зрения URL (парам это то, что после?, Как ?param1=value1&param2=value2)

Что вы делаете здесь get "/full_text/:id", :params => { id: 'foobarcompany' } что переводится на /full_text/:id?id=foobarcompany

Вы хотите использовать get "/full_text/foobarcompany" вместо

Другие вопросы по тегам