외부 API와 작동하는 코드를 테스트하는 방법: Sinatra의 스텁
2081 단어 rubytestingprogramming
X
를 청구합니다. 이 API와 함께 작동하는 코드를 어떻게 테스트합니까?물론 실제로 테스트에서 해당 외부 서비스를 요청할 수 있습니다. 어쩌면 그러한 경우를 위한 샌드박스가 있을 수도 있습니다. 그러나이 솔루션은 그다지 효율적이지 않습니다. 우선 테스트 속도가 느려집니다. 모든 요청에는 시간 비용이 있습니다. 둘째, 테스트를 불안정하게 만듭니다. 네트워크 문제로 인해 테스트가 무작위로 실패합니다. 셋째, 항상 가능한 것은 아닙니다. 외부 서비스에 샌드박스가 없거나 엄격한 요청 제한이 있을 수 있습니다.
이러한 경우 외부 서비스용 스텁을 사용하는 것이 좋습니다. 나는 외부 서비스에 따라 스텁의 네 가지 옵션을 사용합니다. 내 것입니까 아니면 다른 사람의 것입니까, 안정적입니까 아니면 자주 변경됩니까?
옵션 중 하나는 Sinatra의 가짜 서비스입니다. 이것과 같이:
let(:fake_api) do
Class.new Sinatra::Base do
get "/users/:user_id/card" do
content_type :json
{ number: "4111...1111" }.to_json
end
end
end
before do
stub_request(:any, /api.nanocashier.com/).to_rack(fake_api)
end
위의 코드에는 두 가지 흥미로운 점이 있습니다. 첫째,
Class.new
의 Sinatra::Base
부모와 함께 let
테스트에서 전역 상수를 추가하지 않도록 합니다. 둘째, 모든 요청을 랙 애플리케이션으로 라우팅하는 Webmock의 stub_request
입니다.자체 스텁이 없는 외부 서비스(예: stripe-ruby-mock)를 조롱해야 하고 어댑터와 같은 스텁을 만드는 것이 불가능할 때 이러한 랙 기반 스텁을 사용합니다.
Reference
이 문제에 관하여(외부 API와 작동하는 코드를 테스트하는 방법: Sinatra의 스텁), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vasily/how-to-test-code-that-works-with-an-external-api-a-stub-on-sinatra-4ccn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)