Faraday: Funktionsanfrage: Unterstützung von `Faraday::FlatParamsEncoder` in `Faraday::Adapter::Test`

Erstellt am 19. Aug. 2021  ·  4Kommentare  ·  Quelle: lostisland/faraday

1291 führte strict_mode in Faraday::Adapter::Test::Stubs , und ich möchte mehr Funktionen für den Modus: Unterstützung von Faraday::FlatParamsEncoder . Wenn ich beispielsweise einen HTTP-Request mit demselben Abfrageparameter a mehrmals aufrufen möchte, erwarte ich, dass der Test-Stub überprüft, ob dieselben Parameter mit unterschiedlichen Werten alle korrekt übergeben werden.

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

Was denken Sie? Ich möchte einen Pull-Request öffnen, wenn es Sinn macht.

feature help wanted

Hilfreichster Kommentar

Denken Sie auch daran, dass der Zweig main jetzt auf die kommende Version 2.0 verweist.
Wenn Sie dies auch in einer 1.x-Version möchten, müssen Sie den Zweig 1.x verzweigen 👍

Alle 4 Kommentare

Hallo @yykamei , das obige macht für mich Sinn, ich würde mich über eine PR
Aus Neugier, was passiert derzeit mit den obigen Tests? Ist der letzte vorbei?

Denken Sie auch daran, dass der Zweig main jetzt auf die kommende Version 2.0 verweist.
Wenn Sie dies auch in einer 1.x-Version möchten, müssen Sie den Zweig 1.x verzweigen 👍

Hallo @iMacTia , danke für deine Antwort.

Aus Neugier, was passiert derzeit mit den obigen Tests? Ist der letzte vorbei?

Oh, es scheint nicht im neuesten 1.x Zweig zu passieren. Ich denke, das liegt daran, dass Stub#params mit Faraday::Utils.parse_nested_query konstruiert ist; es sieht so aus, als würden vorherige Abfrageparameter überschrieben.

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:

Aber wenn ich den Code so ändere, wird der Test bestanden. Ich habe die Problembeschreibung umgeschrieben.

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

Danke trotzdem. Ich werde einige Änderungen vornehmen 💪

Dieses Problem wurde mit #1316 behoben.

Dankeschön!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen