Faraday: Permintaan fitur: mendukung `Faraday::FlatParamsEncoder` di `Faraday::Adapter::Test`

Dibuat pada 19 Agu 2021  ·  4Komentar  ·  Sumber: lostisland/faraday

1291 memperkenalkan strict_mode di Faraday::Adapter::Test::Stubs , dan saya ingin lebih banyak fitur untuk mode: mendukung Faraday::FlatParamsEncoder . Misalnya, jika saya ingin memanggil permintaan HTTP dengan parameter kueri yang sama a beberapa kali, saya berharap rintisan uji untuk memeriksa apakah parameter yang sama dengan nilai yang berbeda semuanya lulus dengan benar.

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

Bagaimana menurutmu? Saya ingin membuka permintaan tarik jika masuk akal.

feature help wanted

Komentar yang paling membantu

Juga, ingat bahwa cabang main sekarang menunjuk ke rilis v2.0 yang akan datang.
Jika Anda juga menginginkan ini dalam rilis 1.x, Anda harus membuat cabang dari cabang 1.x 👍

Semua 4 komentar

Hai @yykamei , hal di atas masuk akal bagi saya, saya akan menyambut PR.
Karena penasaran, apa yang terjadi saat ini dengan tes di atas? Apakah yang terakhir lewat?

Juga, ingat bahwa cabang main sekarang menunjuk ke rilis v2.0 yang akan datang.
Jika Anda juga menginginkan ini dalam rilis 1.x, Anda harus membuat cabang dari cabang 1.x 👍

Hai @iMacTia , terima kasih atas balasan Anda.

Karena penasaran, apa yang terjadi saat ini dengan tes di atas? Apakah yang terakhir lewat?

Oh, sepertinya tidak lulus di cabang 1.x . Saya pikir ini karena Stub#params dibangun dengan Faraday::Utils.parse_nested_query ; sepertinya mengesampingkan parameter kueri sebelumnya.

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:

Tapi, jika saya mengubah kode seperti ini, tes akan lulus. Saya menulis ulang deskripsi masalah.

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

Terima kasih. Saya akan membuat beberapa perubahan

Masalah ini telah diselesaikan dengan #1316.

Terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

amrrbakry picture amrrbakry  ·  4Komentar

jedeleh picture jedeleh  ·  3Komentar

asf-stripe picture asf-stripe  ·  3Komentar

yusefu picture yusefu  ·  3Komentar

subvertallchris picture subvertallchris  ·  5Komentar