Как проверить обещание, требующее отклонения файла в случае сбоя требования? - PullRequest
0 голосов
/ 14 октября 2019

У меня есть приложение, в котором шаблон json должен быть возвращен в качестве разрешения обещания. Функция, которая возвращает обещание, получает имя файла в качестве аргумента. Обещание потребует файл и проанализирует его, поэтому обещание разрешается с проанализированным объектом из шаблона. Если шаблон не найден, он должен отклонить обещание и выдать ошибку. Обещание в этом случае работает как оболочка для некоторого дополнительного кода, который требует асинхронных вызовов для загрузки контента только при необходимости. Вот файл моего модуля:

define('myFunction', [], function() {
  'use_strict';
  var myModule = {
    loadTamplate: function(Template) {
      return new Promise(function(resolve, reject) {
        require([
          'text!assets/Templates/' + Template + '.json'
        ], function(Template) {
          if (Template) {
            resolve(JSON.parse(Template));
          } else {
            reject(Error("Problem Loading Template"))
          }
        })
      })
    }
  }
  return myModule;
});

Тестирование существующего шаблона работает и выглядит следующим образом:

it('Test existing template', function(done) {
  let promise = MyModule.loadTableTemplate('ExistingTemplate');
  promise
    .then(rslt => {
      expect(rslt).toBeTruthy();
      expect(rslt).toContain({
        "text": "someText",
      });
    })
    .then(done);
});

Я также хотел бы проверить, действительно ли ошибка возникла (и обещание отклонено), когда шаблон не существует, но я получаю «неопределенную» ошибку от requirejs (несмотря на окружение оператора require блоком try / catch). Тест выглядит следующим образом:

it('Test Loading inexistent template', function(done) {
  let result = MyModule.loadTableTemplate('InexistentTemplate');
  result
    .finally(() => {
      expect(result.isRejected()).toBeTruthy();
      done();
    })
})

Это приводит к

Uncaught Error: InexistentTemplate.json HTTP status: 404
    at XMLHttpRequest.e.onreadystatechange

Я думал, что использование блока try catch внутри теста (окружающего оператор result.finally) сделаетхитрость, но результат тот же. Может ли кто-то пролить свет на этот вопрос?

Заранее спасибо.

...