Тестирование нетривиального приложения AngularJS с помощью Karma

Я писал, пытаясь настроить набор тестов для приложения, которое я разрабатывал. Приложение размещается локально и на большинстве учетных записей работает нормально. Я пытался настроить карму с помощью инструкций на сайте AngularJS, на сайте Karma и почти на любом другом сайте, который я мог найти, но я продолжаю получать ту же ошибку.

Вот моя конфа:

urlRoot = '/karma/';
frameworks = ['ng-scenario'];
files = [
  ANGULAR_SCENARIO,
  ANGULAR_SCENARIO_ADAPTER,
  'spec/e2e/*.spec.js'
];
browsers = [
  'Firefox',
];
proxies = {
  '/': 'http://localhost/web/',
};
port = 9876;
singleRun = false;
junitReporter = {
  outputFile: 'logs/e2e.xml',
};
logLevel = LOG_DEBUG;

И пример спецификации:

describe('login test', function() {

  it('should login', function(){
    browser().navigateTo('/');
    if(browser().window().path() != '/'){
      expect(element('[ng-model="username"]').count()).toBeGreaterThan(0);
      input('username').enter('username');
      input('password').enter('password');
      element('#submit').click();
      sleep(3);
    }
    expect(browser().window().path()).toEqual('/');
  });

  it('should logout', function(){
    element('#quit').click();
    element('quit_dialog').click();
    sleep(1);
  });
});

Когда я запускаю тест в html-файле через angular-scenario, он работает нормально, все зеленое. Когда я запускаю его через карму, я получаю следующие ошибки:

Error: Permission denied to access property 'angular'

Я подозреваю, что это междоменная проблема, но почему? И если да, то как я могу это исправить?

ПРИМЕЧАНИЕ. Мое приложение перенаправляет кого-либо на страницу входа с базового URL-адреса. Я предполагал, что карма может справиться с перенаправлением.

РЕДАКТИРОВАТЬ: я клонировал angular-seed и запустил его без изменений (кроме изменения URL-адреса прокси), и это прошло нормально.


person andy    schedule 31.05.2013    source источник
comment
Комментарий Войты на Github: это не проблема Testacular. У Testacular должен быть тайм-аут для каждого теста и набора тестов, чтобы он не зависал вечно (это уже есть в моем списке задач). Проблема в том, что средство запуска угловых сценариев не поддерживает полную перезагрузку страницы.   -  person andy    schedule 01.06.2013


Ответы (1)


При полной перезагрузке страницы Карма теряет «крючок».

Лучшее решение, которое я сейчас использую, — это вручную перейти на страницу.

Например, если вы начнете с «/login» и войдете в систему, что приведет к перенаправлению страницы на «/home», Karma потеряет связь. Итак, после входа в систему вам нужно повторно получить крючок, вручную загрузив страницу, например:

browser().navigate("/login");
//Do login
element("submitButton").click();
//Page gets redirected to /home after successful login, Karma loses hook
browser().navigate("/home"); //Manually navigate to page to regain hook

Это немного хак, но это лучший способ, который я знаю.

person Eric Zhang    schedule 06.06.2013
comment
Эта функция странная и запутанная, но, как вы сказали, она работает. - person andy; 07.06.2013