J'écris des tests pour une API qui devrait envoyer des informations de la base de données (PostreSQL) à partir d'une requête GET. Cependant, ma requête RSpec GET refuse de renvoyer des valeurs.RSPec Demande GET ne renvoyant pas correctement les valeurs de la base de données
C'est le test:
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
Il est censé tester ce contrôleur:
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
Les itinéraires de config/routes.rb:
Rails.application.routes.draw do
get 'siret/:id' => 'siret#show'
get 'full_text/:id' => 'full_text#show'
end
La sortie de le test:
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,
Il devrait trouver au moins 1 résultat, mais il continue à montrer zéro. J'ai déjà vérifié que j'étais sur la bonne base de données de test et que les modèles créés (etablissement) étaient dans la base de données.
avez-vous essayé de définir un 'binding.pry' dans le scénario de test. Ce cas de test échoue-t-il dans le contrôleur pour sélectionner la variable 'etablissement'? –
Je viens de vérifier en ajoutant 'binding.pry' juste après la requête GET, Si je tape" response "alors j'obtiens la réponse vide, si je tape' Etablissement.all' alors je reçois zéro. Ce qui est bizarre parce que si je fais une demande d'Etablissement dans le code de test, j'obtiens un résultat: 'puts Etablissement.first.name' retournera" foobarcompany " Malheureusement, je n'ai jamais utilisé binding.pry auparavant. Que me conseillez-vous d'essayer? –
Ok, si le problème est que 'Etablissement' n'est pas sauvegardé dans le test db quand vous faites' create (: etablissement' je vous suggère d'y retourner dans debug et de vérifier 'etablissement.errors.full_messages' et de vérifier s'il y a quelques erreurs lors de la sauvegarde de l'enregistrement –