Polly.JS: ابزاری برای شبیه‌سازی ریکوئست‌ها و ریسپانس‌های HTTP

Polly.JS: ابزاری برای شبیه‌سازی ریکوئست‌ها و ریسپانس‌های HTTP

Polly.JS یک لایبرری جاوااسکریپتی اپن‌سورس برای شبیه‌سازی ریکوئست‌هایی از جنس HTTP است. این لایبرری کارش را بواسطهٔ ارتباط برقرار کردن با API مرورگر انجام می‌دهد بدین صورت که دولوپرها قادر خواهند بود تا ریکوئست و ریسپانس‌هایی از جنس HTTP را ثبت، اجرا و شبیه‌سازی کنند. به عبارت دیگر، این لایبرری دولوپرها را قادر می‌سازد تا ریسپانس‌های ارسالی از سمت سرور را رصد کرده تا به نقاط ضعف احتمالی اپلیکیشن خود پی ببرند.

برای مثال، نگاهی به یک نمونه تست نوشته‌شده با لایبرری اپن‌سورس Polly.JS می‌اندازیم:

import { Polly } from '@pollyjs/core';

describe('Netflix Homepage', function() {
  it('should be able to sign in', async function() {
    /*
      Create a new polly instance.

      By default, Polly will connect to both fetch and XHR browser APIs and
      will record any requests that it hasn't yet seen while replaying ones it
      has already recorded.
    */
    const polly = new Polly('Sign In');
    const { server } = polly;

    /* Intercept all Google Analytic requests and respond with a 200 */
    server
      .get('/google-analytics/*path')
      .intercept((req, res) => res.sendStatus(200));

    /* Pass-through all GET requests to /coverage */
    server.get('/coverage').passthrough();

    /* start: pseudo test code */
    await visit('/login');
    await fillIn('email', 'polly@netflix.com');
    await fillIn('password', '@pollyjs');
    await submit();
    /* end: pseudo test code */

    expect(location.pathname).to.equal('/browse');

    /*
      Calling `stop` will persist requests as well as disconnect from any
      connected browser APIs (e.g. fetch or XHR).
    */
    await polly.stop();
  });
});

تست فوق خروجی زیر را در اختیار دولوپر قرار خواهد داد به طوری که پروسهٔ ارسال ریکوئست (درخواست) به سمت سرور برای لاگین و همچنین دریافت ریسپانس (پاسخ) را شامل می‌گردد:

{
  "log": {
    "_recordingName": "Sign In",
    "browser": {
      "name": "Chrome",
      "version": "67.0"
    },
    "creator": {
      "name": "Polly.JS",
      "version": "0.5.0"
    },
    "entries": [
      {
        "_id": "06f06e6d125cbb80896c41786f9a696a",
        "_order": 0,
        "cache": {},
        "request": {
          "bodySize": 51,
          "cookies": [],
          "headers": [
            {
              "name": "content-type",
              "value": "application/json; charset=utf-8"
            }
          ],
          "headersSize": 97,
          "httpVersion": "HTTP/1.1",
          "method": "POST",
          "postData": {
            "mimeType": "application/json; charset=utf-8",
            "text": "{\"email\":\"polly@netflix.com\",\"password\":\"@pollyjs\"}"
          },
          "queryString": [],
          "url": "https://netflix.com/api/v1/login"
        },
        "response": {
          "bodySize": 0,
          "content": {
            "mimeType": "text/plain; charset=utf-8",
            "size": 0
          },
          "cookies": [],
          "headers": [],
          "headersSize": 0,
          "httpVersion": "HTTP/1.1",
          "redirectURL": "",
          "status": 200,
          "statusText": "OK"
        },
        "startedDateTime": "2018-06-29T17:31:55.348Z",
        "time": 11,
        "timings": {
          "blocked": -1,
          "connect": -1,
          "dns": -1,
          "receive": 0,
          "send": 0,
          "ssl": -1,
          "wait": 11
        }
      }
    ],
    "pages": [],
    "version": "1.2"
  }
}

این لایبرری به صورت اپن‌سورس توسط کمپانی Netflix تحت مجوز Apache License عرضه شده است.