Как я могу сделать модульный тест, чтобы увидеть, если угол не определен?
Я использую угловую версию 1 с жасмином для моих юнит-тестов.
Тест, который я хочу сделать, это:
Например, когда я загружаю страницу index.html в ie7, я загружаю html-баннер с надписью "загрузите последний браузер".
В настоящее время я загружаю HTML-шаблон с помощью JQuery на странице индекса.
Можно ли это проверить, так как это вне углового приложения.
Это мой текущий код на моей странице index.html:
<!doctype html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<base href="/app/" />
<!-- Is Angular supported -->
<script>
if(window.angular === undefined)
$(function(){$("#angularNotSupportedModal").load("/app/noAngularModal.html");});
</script>
</head>
<body ng-app="app" ng-cloak>
<div id="angularNotSupportedModal"></div>
<div ui-view></div>
<!-- Application -->
<script src="/scripts/app.js"></script>
<!-- Config -->
<script src="/scripts/config.js"></script>
</body>
</html>
Любые предложения будут великолепны.
Спасибо
1 ответ
Задача сводится к старому доброму тестированию jQuery, которое утомительно, но возможно. Это зависит от кода, если jQuery
может быть просто шпионить или должны быть полностью заглушены и насмехаются.
Тестируемый скрипт должен быть изолирован для отдельной функции, которая должна быть протестирована должным образом. Это может быть что-то вроде этого:
it('should call through $ chain', (done) => {
var angular = window.angular;
window.angular = undefined;
spyOn(jQuery.prototype, 'ready').and.callThrough();
spyOn(jQuery.prototype, 'load').and.callThrough();
// make spy not break the chain
var init = jQuery.prototype.init.bind(jQuery.prototype);
spyOn(jQuery.prototype, 'init').and.callFake(init);
window.runAngularNotSupportedFunction();
expect(jQuery.prototype.ready).toHaveBeenCalledWith(jasmine.any(Function));
expect(jQuery.prototype.init).toHaveBeenCalledWith('#angularNotSupportedModal', undefined);
expect(jQuery.prototype.load).toHaveBeenCalledWith('/app/noAngularModal.html');
window.angular = angular;
jQuery.ready.promise().done(done)
})