У меня есть приложение, в котором шаблон 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) сделаетхитрость, но результат тот же. Может ли кто-то пролить свет на этот вопрос?
Заранее спасибо.