Транспортир не может найти угловой

Я пытаюсь настроить тесты unit/e2e для углового приложения. Следуя инструкциям на веб-сайте транспортира и многочисленным другим примерам, я настроил его и смог запустить тесты, если они не относятся к угловым объектам. Вот пример html-страницы, для которой я хочу иметь тесты:

<!DOCTYPE html>
<html ng-app="app">
<head>
    <script type="text/javascript" src="libraries/angular.js"></script>
    <script type="text/javascript" src="libraries/angular-route.js"></script>
    <script type="text/javascript" src="libraries/angular-touch.js"></script>
    <script type="text/javascript" src="libraries/angular-sanitize.js"></script>
    <script type="text/javascript" src="libraries/angular-mocks.js"></script>

    .....
</head>
<body ng-controller="DefaultController">

...

Тест:

describe('Logon page', function ()
{
    beforeEach(function ()
    {
        browser.get('default.html');

        angular.module("app");
    });

    it('should have a title', function ()
    {
        expect(browser.getTitle()).toEqual('Logon');
    });
});

как только я запускаю его, я получаю исключение: «ReferenceEror: angular не определен». Если я удалю строку "angular.module("app");" - работает нормально. Глядя на консольный вывод транспортира, похоже, что Protractor.waitForAngular() вызывается внутри после того, как я пытаюсь получить доступ к «угловому» объекту. Но насколько я понимаю browser.get - должен ли он загружаться раньше?

Я использую угловой 1.3.4 и транспортир 1.4.0.

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


person Amid    schedule 03.12.2014    source источник


Ответы (1)


Зачем вам нужна часть angular.module("app");? Код, который вы пишете в тесте Protractor, не запускается в браузере. Он использует API браузера (через Selenium), но у вас нет прямого доступа к модулям angular или другим структурам на тестируемой странице.

Я думаю, вы, возможно, перепутали концепции модульных тестов и E2E-тестов. Вам понадобится angular.module("app"); только для модульных тестов.

person Michał Dudak    schedule 03.12.2014
comment
Я хотел бы протестировать контроллер/сервис/и т.д. Как в следующей статье: тестовые контроллеры. Поэтому мне нужно получить доступ к угловым объектам. - person Amid; 03.12.2014
comment
Тогда вам не нужен Protractor для этого. Модульные тесты можно выполнять с помощью Karma runner. Protractor используется для сквозных тестов (то есть, когда вы тестируете не отдельные контроллеры, сервисы и т. д., а ваше приложение в целом, обычно с бэкендом, базой данных и т. д.) - person Michał Dudak; 03.12.2014
comment
В порядке. Итак, если я правильно вас понимаю, транспортир никогда не предназначен и не может иметь доступ к библиотеке angular. Работает только с конечным результатом. И если я хочу запустить тесты контроллера и т. д. - я должен запустить их с помощью Karma - могу ли я использовать эти объекты? - person Amid; 03.12.2014
comment
Да, в принципе правильно. Protractor используется для тестирования сайтов, созданных с помощью angular, но без знания их внутренностей. - person Michał Dudak; 03.12.2014