Faraday: طلب الميزة: دعم `Faraday :: FlatParamsEncoder` في` Faraday :: Adaptor :: Test`

تم إنشاؤها على ١٩ أغسطس ٢٠٢١  ·  4تعليقات  ·  مصدر: lostisland/faraday

قدم 1291 strict_mode في Faraday::Adapter::Test::Stubs ، وأريد المزيد من الميزات للوضع: دعم Faraday::FlatParamsEncoder . على سبيل المثال ، إذا كنت أرغب في استدعاء طلب HTTP باستخدام نفس معامل الاستعلام a عدة مرات ، أتوقع أن يقوم كعب الاختبار بالتحقق مما إذا كانت نفس المعلمات ذات القيم المختلفة قد تم تمريرها جميعًا بشكل صحيح.

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

ماذا تعتقد؟ أريد فتح طلب سحب إذا كان ذلك منطقيًا.

feature help wanted

التعليق الأكثر فائدة

تذكر أيضًا أن الفرع main يشير الآن إلى الإصدار v2.0 القادم.
إذا كنت ترغب في ذلك في إصدار 1.x أيضًا ، فستحتاج إلى تفريع فرع 1.x 👍

ال 4 كومينتر

مرحبًا yykamei ، ما ورد أعلاه منطقي بالنسبة لي ،
بدافع الفضول ، ماذا يحدث حاليًا في الاختبارات المذكورة أعلاه؟ هو آخر واحد يمر؟

تذكر أيضًا أن الفرع main يشير الآن إلى الإصدار v2.0 القادم.
إذا كنت ترغب في ذلك في إصدار 1.x أيضًا ، فستحتاج إلى تفريع فرع 1.x 👍

مرحبًا iMacTia ، شكرًا على ردك.

بدافع الفضول ، ماذا يحدث حاليًا في الاختبارات المذكورة أعلاه؟ هو آخر واحد يمر؟

أوه ، يبدو أنه لا يمر في أحدث فرع 1.x . أعتقد أن هذا بسبب إنشاء Stub#params باستخدام Faraday::Utils.parse_nested_query ؛ يبدو أنه تجاوز معامِلات طلب البحث السابقة.

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:

ولكن ، إذا قمت بتغيير الرمز مثل هذا ، فسوف ينجح الاختبار. أعدت كتابة وصف المشكلة.

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

شكرا على كل حال. سأقوم ببعض التغييرات 💪

تم حل هذه المشكلة مع رقم 1316.

شكرا لك!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

jasnow picture jasnow  ·  9تعليقات

JohnBat26 picture JohnBat26  ·  11تعليقات

gjtorikian picture gjtorikian  ·  18تعليقات

dduugg picture dduugg  ·  12تعليقات

jwaldrip picture jwaldrip  ·  13تعليقات