Ось як перевіряє зовнішні API в еліксирі з обходом

$config[ads_kvadrat] not found

Новые серии ? 2018 года подряд ? Барбоскины ✔️ Сборник мультфильмов

Новые серии ? 2018 года подряд ? Барбоскины ✔️ Сборник мультфильмов

Зміст:

Anonim

Ми визначили пріоритети принципів архітектури, орієнтованих на обслуговування Обернено. Це означає, що ми маємо невеликі компоненти, що підтримуються, з чітко визначеними обов'язками. Вони спілкуються один з одним (в основному), через передачу репрезентативних станів, або REST, API.

Це забезпечує гнучкість і служить нам добре, за винятком одного важливого аспекту: Тестування. Під час тестування слід уникати:

  • Залежність від зовнішніх служб, що працюють на одній машині.
  • Повільні тести.

Оскільки програми за своєю суттю покладаються на зовнішні служби, дуже важливо мати стратегію тестування для цих залежностей.

Нещодавно ми почали використовувати Bypass, і я поясню, як ми приїхали туди і зокрема, як ми його використовуємо.

Минуле

Макет методів і повернення деяких прикладних даних, таких як:

Це було (і я вважаю, що все ще є) “шлях” у світі Ruby / Rails. На жаль, це сприяє поганій поведінці, що найкраще пояснюється тут Хосе Валімом.

Потім ми почали використовувати ExVCR, який є великою бібліотекою, але має аналогічні недоліки, як макет / заглушки: він заохочує лінь і не сприяє розмежуванню проблем, які є критичними для чітко визначених API. ExVCR дозволяє «записувати» та «відтворювати» дані реального життя. Її дуже легко інтегрувати (включаючи кілька рядків у вашому тесті і про все інше). Але в ідеалі ви повинні думати про зовнішні залежності в тестах, а не абстрагуватися. Це може бути ще й доцільним вибором для сценаріїв, коли поведінку кінцевої точки слід перевірити з мінімальними накладними витратами (ми використовуємо її для тестування викликів служб Amazon AWS Services, таких як S3).

Введіть адаптери

Адаптери відмінно працюють і сприяють обговоренню контрактів API та чітко визначеним кордонам зв'язку. Ми досі використовуємо цей підхід, особливо коли адаптер є більш складним (наприклад, сокет JSON-RPC).

Це виглядає так:

Але для простих кінцевих точок HTTP адаптери здаються великою роботою і мають великий недолік: вони залишають бібліотеки, які вони споживають, з рівняння тестування. Якщо що-небудь у бібліотеках HTTP або JSON змінюється, тести його не впізнать. Кількість критично важливого для виробництва коду, який не перевіряється цим підходом, є неприйнятним.

Сьогодні і майбутнє

Обхід дозволяє запустити дуже простий веб-сервер в тестах, які моделюють зовнішні служби, які ми використовуємо.

Тепер ми можемо протестувати весь стек, включаючи бібліотеку HTTP, бібліотеку кодування / декодування JSON і механізми аутентифікації. Обхідний README добре написаний, тому я заощаджую деталі впровадження. Проте ми трохи змінюємо, як ми його використовуємо, щоб зберегти тести короткими і читабельними:

По-перше, ми іноді хочемо звертатися до Facebook, коли тести виконуються як повний пакет інтеграції. Ми робимо це нерегулярно, щоб забезпечити функціонування API Facebook на наші очікування. Додавання - включають інтеграцію до тест суміші не імітує API, але замість цього викликає зовнішню службу (рядки 5, 7).

Ми явні, коли ми моделюємо запити до зовнішніх служб, так що кожен тест, який використовує обхід, повинен мати @tag facebook_bypass (рядок 7).

Нарешті, handle_fb функція (рядки 30–39) називається (з урахуванням того, що request_path відповідності). Мені подобається збігатися в голові функції, оскільки це робить явний шлях, на який ми реагуємо, і дозволяє визначити різні функції для різних шляхів.

Отже, обхід виконується тільки з тестами з тегами @tag: обхід і коли ми не керуємо нашим інтеграційним пакетом. Ще одна річ, яку ми робимо під час налаштування Bypass, дозволяє тегу передавати ідентифікатор сторінки (рядки 8, 20). Так ось як тест, який використовує обхід виглядає у всій красі:

Як бачите, facebook_bypass тег робить явним, що ми імітуємо API (якщо ми не в режимі інтеграції). Це дозволяє нам передавати інформацію до модельованого API, і дуже просто повторно використовувати той же конфігурацію обходу для різних тестів.

Сподіваюся, це допоможе вам перевірити зовнішні API. Ви можете знайти мене на Twitter (див. Нижче), якщо у Вас виникнуть додаткові запитання.

$config[ads_kvadrat] not found