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¶m2=value2
)
你在这里做的是 get "/full_text/:id", :params => { id: 'foobarcompany' }
转换成 /full_text/:id?id=foobarcompany
您想改用 get "/full_text/foobarcompany"
我正在为一个 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¶m2=value2
)
你在这里做的是 get "/full_text/:id", :params => { id: 'foobarcompany' }
转换成 /full_text/:id?id=foobarcompany
您想改用 get "/full_text/foobarcompany"