тестирование удаленного варианта бладхаунда с жасмином - PullRequest
0 голосов
/ 29 августа 2018

Я работаю с https://bootstrap -tagsinput.github.io / bootstrap-tagsinput / examples / для обработки выбора тегов. Эта библиотека использует бладхаунда в качестве механизма предложения, как показано в этих примерах.

В моих тестах компонентов angular2 + я звоню $el.focus(). $ el - это поле ввода, в котором я использую bootstrap-tagsinput.

После события focus () я вызываю тайм-ауты в 1000 миллисекунд, а затем озвучиваю ответ ajax следующим образом ...

const request = jasmine.Ajax.requests.mostRecent();
request.respondWith(response);

Проблема в том, что тесты flaky выполняются в CircleCI и проходят локально (только при использовании браузера). в CI они иногда работают, а иногда нет. Когда я удаляю тайм-ауты (которые я бы хотел отменить), тесты вообще не работают. Это потому, что вызов jasmine.Ajax.requests.mostRecent() возвращает undefined.

Когда я пытаюсь запустить весь угловой пакет в терминале локально, тесты все время терпят неудачу. Такое ощущение, что вызов ajax бладхаундом вообще не сработал, или он был поглощен чем-то другим. Вот мой тестовый костюм в полном объеме ...

describe('Component', () => {
  let $el: JQuery;

  beforeEach(() => {
    jasmine.Ajax.install();
  });

  afterEach(() => {
    jasmine.Ajax.uninstall();
  });

  describe('filters with different roles', () => {
    it('should load and select project filter optionsr', () => {
      setCurrentUser({ role: ['some role'] });
      $el = instantiateComponent();

      const response = {
        responseText: '[{ "id":1, "name":"Nice name"}]',
        status: 200,
      };

      $el.find('input[placeholder="Project(s)"]').focus();

      runTimeouts(1000)

      // the focus triggered an Ajax request to /projects.json
      const request = jasmine.Ajax.requests.mostRecent();

      request.respondWith(response); // this fails because request sometimes is undefined.

     // I then test for UI changes here
    });

  });
});

Что я делаю не так? Есть ли способ сделать это без тайм-аутов, которые обеспечивают согласованность в тестах?

1 Ответ

0 голосов
/ 31 августа 2018

Оказывается, использование $elemet.focus() или $element.click() было проблемой. Он работал, используя вместо этого ngClick (). $el.find('input[placeholder="Project(s)"]').ngClick();. Не уверен, почему это так.

...