strict_mode
dans Faraday::Adapter::Test::Stubs
, et je veux plus de fonctionnalités pour le mode : prise en charge de Faraday::FlatParamsEncoder
. Par exemple, si je souhaite appeler plusieurs fois une requête HTTP avec le même paramètre de requête a
, je m'attends à ce que le talon de test vérifie si les mêmes paramètres avec des valeurs différentes sont tous correctement transmis.class Client
def initialize(conn)
<strong i="10">@conn</strong> = conn
end
def sushi(jname, params: {})
res = @conn.get("/#{jname}", params)
data = JSON.parse(res.body)
data['name']
end
end
RSpec.describe Client do
let(:stubs) { Faraday::Adapter::Test::Stubs.new(strict_mode: true) }
let(:conn) { Faraday.new(request: { params_encoder: Faraday::FlatParamsEncoder }) { |b| b.adapter(:test, stubs) } }
let(:client) { Client.new(conn) }
it 'handles the same multiple URL parameters' do
# The same parameter `a` is expected to appear multiple times with different values.
stubs.get('/ebi?a=x&a=y&a=z') { [200, { 'Content-Type' => 'application/json' }, '{"name": "shrimp"}'] }
# Test should pass
expect(client.sushi('ebi', params: { a: %w[x y z] })).to eq('shrimp')
# Test should not pass due to the lack of "x" and "y" for `a`
# expect(client.sushi('ebi', params: { a: %w[z] })).to eq('shrimp')
stubs.verify_stubbed_calls
end
end
Qu'est-ce que tu penses? Je veux ouvrir une pull request si cela a du sens.
Salut @yykamei , ce qui précède a du sens pour moi, je serais heureux d'avoir un PR.
Par curiosité, que se passe-t-il actuellement avec les tests ci-dessus ? Le dernier passe-t-il ?
N'oubliez pas non plus que la branche main
pointe maintenant vers la prochaine version 2.0.
Si vous souhaitez également cela dans une version 1.x, vous devrez vous séparer de la branche 1.x
👍
Salut @iMacTia , merci pour votre réponse.
Par curiosité, que se passe-t-il actuellement avec les tests ci-dessus ? Le dernier passe-t-il ?
Oh, ça ne semble pas passer dans la dernière branche 1.x
. Je pense que c'est parce que Stub#params
est construit avec Faraday::Utils.parse_nested_query
; cela ressemble à écraser les paramètres de requête précédents.
Randomized with seed 45661
Client
handles the same multiple URL parameters (FAILED - 1)
Failures:
1) Client handles the same multiple URL parameters
Failure/Error:
raise Stubs::NotFound, "no stubbed request for #{env[:method]} "\
"#{normalized_path} #{env[:body]}"
Faraday::Adapter::Test::Stubs::NotFound:
no stubbed request for get /ebi?a=x
# ./lib/faraday/adapter/test.rb:253:in `call'
# ./lib/faraday/rack_builder.rb:154:in `build_response'
# ./lib/faraday/connection.rb:511:in `run_request'
# ./lib/faraday/connection.rb:200:in `get'
# ./ok.rb:11:in `sushi'
# ./ok.rb:30:in `block (2 levels) in <top (required)>'
Finished in 0.00391 seconds (files took 0.78136 seconds to load)
1 example, 1 failure
Failed examples:
Mais, si je change le code comme ça, le test passera. J'ai réécrit la description du problème.
diff --git a/a.rb b/a.rb
index c4b7084..91d795d 100644
--- a/a.rb
+++ b/a.rb
@@ -27,7 +27,7 @@ RSpec.describe Client do
expect(client.sushi('ebi', params: { a: %w[x y z] })).to eq('shrimp')
# Test should not pass due to the lack of "y" and "z" for `a`
- expect(client.sushi('ebi', params: { a: %w[x] })).to eq('shrimp')
+ expect(client.sushi('ebi', params: { a: %w[z] })).to eq('shrimp')
stubs.verify_stubbed_calls
end
end
Merci quand même. Je vais faire quelques changements
Ce problème a été résolu avec #1316.
Merci!
Commentaire le plus utile
N'oubliez pas non plus que la branche
main
pointe maintenant vers la prochaine version 2.0.Si vous souhaitez également cela dans une version 1.x, vous devrez vous séparer de la branche
1.x
👍