Как выполнить модульный тест начальной загрузки в Карма Жасмин? - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть проект Aurelia, использующий ECMAscript 6, и я пытаюсь выполнить модульное тестирование функции, которая вызывает $('#saveFailed').modal(); из начальной загрузки Twitter 3.

Эта функция прекрасно работает в самом приложении, но когда я пытаюсьчтобы spyOn модальный, чтобы вернуть поддельный результат, консоль говорит мне, что jquery не знает модальных:

Error: <spyOn> : modal() method does not exist

У меня есть bootstrap.min.js и jquery, правильно загружаютсяи может видеть их в chrome devtools при запуске karma в отладке:

files: [
  '../styles/bootstrap/css/bootstrap.min.css',
  '../node_modules/jquery/dist/jquery.min.js',
  '../styles/bootstrap/js/bootstrap.js',
  ... ]

Пример тестируемой функции

  async create() {
    let result = false;

    if (someCondition) {
      result = await this.session.update();
    } else {
      result = true;
    }

    if (result) {
      super.saveAndContinue();
    } else {
      this.allowContinue = false;
      $('#saveFailed').modal();
    }
  }

Пример тестового фрагмента

    it('blah blah', done => {
      (async () => {

        spyOn(componentUnderTest.session, 'update').and.returnValue(null);

        spyOn($.fn, 'modal').andCallFake(function() {});

        await componentUnderTest.create();
        expect(componentUnderTest.allowContinue).toBeFalsy();
        done();
      })().catch(done.fail);
    });
  });

Я также пытался шпионить за $('#saveFailed') и добавлять жестко закодированный html модала к $document.body в beforeEach.

Кто-нибудь знает, как я могу заставить jquery распознавать"модальная" функция, которая определена в bootstrap.min.js?

...