Faraday: Запрос функции: поддержка `Faraday :: FlatParamsEncoder` в` Faraday :: Adapter :: Test`

Созданный на 19 авг. 2021  ·  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 рейтинги

Смежные вопросы

t3hk0d3 picture t3hk0d3  ·  3Комментарии

JasonBarnabe picture JasonBarnabe  ·  4Комментарии

Lewiscowles1986 picture Lewiscowles1986  ·  4Комментарии

mattmill30 picture mattmill30  ·  4Комментарии

yusefu picture yusefu  ·  3Комментарии