Faraday: ์ƒˆ ๋ฌธ์„œ๋ฅผ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ํŽ˜์ด์ง€

์— ๋งŒ๋“  2019๋…„ 07์›” 09์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: lostisland/faraday

๊ธฐ๋ณธ ์ •๋ณด

  • ํŒจ๋Ÿฌ๋ฐ์ด ๋ฒ„์ „: ๋งˆ์Šคํ„ฐ
  • ๋ฃจ๋น„ ๋ฒ„์ „: 2.6.3

๋ฌธ์ œ ์„ค๋ช…

Faraday๋ฅผ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ๋ฌธ์„œ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ผํ•˜๋Š” ๊ณณ์—์„œ Ruby on Rails๋Š” ๋ฉ‹์ง€๊ธฐ ๋•Œ๋ฌธ์— ์†Œ๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋นจ๊ฐ„์ƒ‰ ์ผ€์ด์Šค ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด์„œ๋Š” ๊ฑฐ์˜ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ๋•๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„

  • ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜์‹ญ์‹œ์˜ค.
  • usage ํด๋ฆญ
  • ๋” ์ด์ƒ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ”๋‹ฅ๊ธ€ ๋‹ค์Œ ๋งํฌ๋ฅผ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค(https://lostisland.github.io/faraday/usage/streaming).
  • ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ์—†์Œ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค :scream_cat:

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์˜ฌ๋ ค์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋ผ์ด๋ธŒ ํ…Œ์ŠคํŠธ/์œ ๋‹› ๋ฐ ํŒจ๋Ÿฌ๋ฐ์ด ํ…Œ์ŠคํŠธ ์–ด๋Œ‘ํ„ฐ ์‚ฌ์šฉ์— ๋Œ€ํ•œ rspec ์˜ˆ์ œ๋ฅผ ํฌํ•จํ•˜๋Š” PR์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค: #1000. ์ด๊ฒƒ์€ ์™ธ๋ถ€ ํ…Œ์ŠคํŠธ ์ด์ค‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(rspec, mocha, webmock ๋“ฑ) ๋Œ€์‹  Faraday๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  4 ๋Œ“๊ธ€

์˜ฌ๋ ค์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋ผ์ด๋ธŒ ํ…Œ์ŠคํŠธ/์œ ๋‹› ๋ฐ ํŒจ๋Ÿฌ๋ฐ์ด ํ…Œ์ŠคํŠธ ์–ด๋Œ‘ํ„ฐ ์‚ฌ์šฉ์— ๋Œ€ํ•œ rspec ์˜ˆ์ œ๋ฅผ ํฌํ•จํ•˜๋Š” PR์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค: #1000. ์ด๊ฒƒ์€ ์™ธ๋ถ€ ํ…Œ์ŠคํŠธ ์ด์ค‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(rspec, mocha, webmock ๋“ฑ) ๋Œ€์‹  Faraday๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ, ์—ฐ๊ฒฐ ์˜ค๋ฅ˜ ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์„ ์ „ํ˜€ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์ œ๊ฐ€ ์ฐก๊ทธ๋ฆฐ ๊ฒƒ์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด PR #998์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ตฌ๋ฌธ์„ ์–ป์ง€ ๋ชปํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

๋‚˜๋Š” ๊ตฌ๋ฌธ์„ ์–ป์ง€ ๋ชปํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

Oof, ์•„๋งˆ๋„ Faraday ํ…Œ์ŠคํŠธ ๋ฌธ์„œ๋ฅผ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค./

#1000์˜ ๊ตฌ๋ฌธ์€ ํŒจ๋Ÿฌ๋ฐ์ด ์š”์ฒญ/์‘๋‹ต ์ฃผ๊ธฐ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ๋… ์Šคํ… ๊ฐœ์ฒด์ธ Faraday::Adapter::Test::Stubs ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ํ…Œ์ŠคํŠธ์—์„œ http ์š”์ฒญ์— ๋Œ€ํ•œ ๋ชจ์˜ ์‘๋‹ต์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  it 'parses name' do
    # this block yields a rack response: an array with:
    # response status, http header hash, and response body
    stubs.get('/ebi') do |env|
      [
        200,
        { 'Content-Type': 'application/javascript' },
        '{"name": "shrimp"}'
      ]
    end

    expect(client.sushi('ebi')).to eq('shrimp')
    stubs.verify_stubbed_calls
end

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ๊ท€ํ•˜์˜ ๋ฌธ์ œ๋ฅผ ์ถฉ๋ถ„ํžˆ ์ž์„ธํžˆ ์ฝ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ํŠน๋ณ„ํžˆ ์˜ˆ์™ธ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ๋ฅผ ์›ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์™„์ „ํžˆ ๋†“์ณค์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ํ…Œ์ŠคํŠธ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(#1000์— ์ถ”๊ฐ€ํ•  ์˜ˆ์ •).

  it 'handles exception' do
    stubs.get('/ebi') do
      raise Faraday::ConnectionFailed, nil
    end

    expect { client.sushi('ebi') }.to raise_error(Faraday::ConnectionFailed)
    stubs.verify_stubbed_calls
  end

๋‚˜๋Š” ์—ฌ์ „ํžˆ ์ „์ฒด ํŒจ๋Ÿฌ๋ฐ์ด ์š”์ฒญ ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๋‹ค ์ผ๋ฐ˜ํ™”๋œ ์กฐ๋กฑ ์ ‘๊ทผ ๋ฐฉ์‹๋ณด๋‹ค ์ด์™€ ๊ฐ™์€ ํŠน์ • ํ…Œ์ŠคํŠธ ์ด์ค‘ ๊ตฌํ˜„์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์–ด์จŒ๋“  RSpec ๋ชจ์˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์šฐ์ˆ˜ํ•œ RSpec ๋ฌธ์„œ์™€ ํ•จ๊ป˜ ๋” ์ž˜ ์ œ๊ณต๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

#1000๊ณผ ํ•จ๊ป˜ ์ œ๊ณต

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

jeffb-stell picture jeffb-stell  ยท  5์ฝ”๋ฉ˜ํŠธ

jordansissel picture jordansissel  ยท  5์ฝ”๋ฉ˜ํŠธ

subvertallchris picture subvertallchris  ยท  5์ฝ”๋ฉ˜ํŠธ

t3hk0d3 picture t3hk0d3  ยท  3์ฝ”๋ฉ˜ํŠธ

iMacTia picture iMacTia  ยท  3์ฝ”๋ฉ˜ํŠธ