Как заблокировать AJAX запросов, ответ которых зависит от переданных данных? - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь провести юнит-тестирование с Жасмин. Мне нужно смоделировать два запроса AJAX GET на один и тот же URL, но чьи ответы зависят от данных, переданных в запросе. До сих пор я не смог найти никакой информации о том, как сделать ответ зависимым от чего-либо, кроме URL.

Я пытался использовать метод stubRequest:

   jasmine.Ajax.stubRequest('MY_URL.json')
      .andReturn({
        "status": 200,
        "contentType": 'application/json',
        "responseText": rawData
      });

Следует также отметить, что AJAX запросы выполняются в произвольном порядке. Также передаваемые данные - это всего лишь один параметр.

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Электронная документация довольно скудна, но я нашел определение метода (Jasmine v3.4.0), которое отвечает на мой вопрос:

this.stubRequest = function(url, data, method) {
  var stub = new $ajax.RequestStub(url, data, method);
  stubTracker.addStub(stub);
  return stub;
};

Аргумент data - это объект с ключами и значениями. параметры и значения URL.

jasmine.Ajax.stubRequest('MY_URL.json', {param1: "value1"}, "GET")
  .andReturn({
    "status": 200,
    "contentType": 'application/json',
    "responseText": rawData
  });

Или так, подумал я. На самом деле, хотя это может работать для POST, для запроса GET, который я пытаюсь выполнить, оказывается, что вы должны добавить параметры в URL-адрес напрямую. Так что для запроса в ОП,

jasmine.Ajax.stubRequest('MY_URL.json?param1=value1')
  .andReturn({
    "status": 200,
    "contentType": 'application/json',
    "responseText": rawData
  });
0 голосов
/ 11 марта 2020

Если вы используете среду на основе Nodejs, то вам поможет эта библиотека .

В этом примере показано, как возвращать разные ответы в зависимости от данных запроса с использованием библиотеки:

const myRequestStub = nock('http://my-domain.tld')
  .post('/some/request/path')
  .reply(201, (uri, requestBody) => {
    // Here you can do what you want and return response depending on the request
    return [
      // Response HTTP code
      201,
      // Response
      'this is my custom response body',
      // optional headers
      { header: 'value' },
    ];
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...