Как я могу сделать модульный тест, чтобы увидеть, если угол не определен?

Я использую угловую версию 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)
})
Другие вопросы по тегам