Как проверить результаты запроса, сделанного частным методом? - PullRequest
1 голос
/ 09 октября 2019

У меня есть следующий код Javascript:

(function (MyApp) {

  var MY_KEYS;

  get('/api/mykeys.jsp')
    .then(function (response) {
      let parsed = JSON.parse(response).keys;
      MY_KEYS = {};
      MY_KEYS.production = parsed.find(function (key) { return key.environment === 'PROD'; }).kid;
      MY_KEYS.sandbox = parsed.find(function (key) { return key.environment === 'SANDBOX'; }).kid;
    })
    .catch(function () {
      // Error handling
    });

  // --------------------------------------
  // Public Methods
  // --------------------------------------
  function method1 () {
    // Derive values from MY_KEYS
  }

  function method2 () {
    // Derive values from MY_KEYS
  }

  // --------------------------------------
  // Private Methods
  // --------------------------------------
  function get (url) {
    return new Promise(function (resolve, reject) {
      var req = new XMLHttpRequest();
      req.open('GET', url);
      req.onload = function () {
        if (req.status === 200) {
          resolve(req.response);
        } else {
          reject(Error(req.statusText));
        }
      };

      req.onerror = function () {
        reject(Error('Network Error'));
      };

      req.send();
    });
  }

  // --------------------
  // API
  // --------------------
  window[MyApp] = {
    method1: method1,
    method2: method2
  };
}(window));

У меня есть два открытых метода и частный метод get(), который выполняет запрос GET. get() вызывается при загрузке страницы, а значение MY_KEYS используется в обоих открытых методах.

Я хочу проверить, что значения, установленные в открытых методах, верны (что требует MY_KEYS, чтобы быть корректным).

Используя поддельный XHR API Sinon.JS, мой тест выглядит примерно так:

describe('MyApp: ', function () {

      beforeEach(function() {
        fakeServer = sinon.createFakeServer();
        MyApp = {
          method1: function () {},
          method2: function () {}
        };
      });

      afterEach(function() {
        fakeServer.restore();
      });

      describe("method1(): ", function () {

        beforeEach(function () {

            var json = {
                keys: [
                    { environment: "PROD", kid: "prodkey" },
                    { environment: "SANDBOX", kid: "sandboxkey" }
                ]
            };

            var keysResponse = [
              200,
              { 'Content-type': 'application/json' },
              JSON.stringify(json)
            ];

            fakeServer.respondWith('GET', '/api/mykeys.jsp', keysResponse);
          });

        it("Function 'launchUI' should be defined", function () {
          fakeServer.respond();
          expect(fakeServer.requests.length).toBe(1);
        });

      });
    });

Сбой теста с «Ожидать от 0 до 1», поскольку вызов никогда не выполняется. Есть идеи, где я иду не так?

...