Faraday: Demande de fonctionnalité : prise en charge de `Faraday::FlatParamsEncoder` dans `Faraday::Adapter::Test`

Créé le 19 août 2021  ·  4Commentaires  ·  Source: lostisland/faraday

1291 a introduit 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.

feature help wanted

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 👍

Tous les 4 commentaires

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!

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

QuinnWilton picture QuinnWilton  ·  4Commentaires

amrrbakry picture amrrbakry  ·  4Commentaires

ioquatix picture ioquatix  ·  4Commentaires

aleksb86 picture aleksb86  ·  3Commentaires

olleolleolle picture olleolleolle  ·  5Commentaires