Можно ли смешивать Testacular (Karma) с угловым сценарием?

Testacular (теперь Karma) великолепен, как и angular-scenario. Однако их совместное использование оказывается проблемой. В Testacular есть ANGULAR-SCENARIO-ADAPTER, но он ломает простые тесты. Если вы включите angular-scenario.js самостоятельно, Testacular вообще не будет запускать тесты. У кого-нибудь это нормально работает?

УГЛОВОЙ-СЦЕНАРИЙ-АДАПТЕР

Я пытался использовать это с тривиальным тестом, но увидел странное поведение:

Тестовое задание:

describe('Simple', function(){
    it('should compare strings', function(){
        expect('foo').toBe('foo');
    });
});

Нормальное поведение с конфигом:

files = [
  JASMINE,
  JASMINE_ADAPTER,
//    ANGULAR_SCENARIO,
//    ANGULAR_SCENARIO_ADAPTER,
    'tests/lib/angular/angular.js',

    'tests/sample.js'
];

выход:

$ testacular start
info: Testacular server started at http://localhost:9876/
info (launcher): Starting browser ChromeCanary
info (Chrome 25.0): Connected on socket id KRwEUtKtiaJs3MoiEsNg
Chrome 25.0: Executed 1 of 1 SUCCESS (0.061 secs / 0.003 secs)

При добавлении конфигурации адаптера ANGULAR:

files = [
  JASMINE,
  JASMINE_ADAPTER,
    ANGULAR_SCENARIO,
    ANGULAR_SCENARIO_ADAPTER,
    'tests/lib/angular/angular.js',

    'tests/sample.js'
];

вывод:

$ testacular start
info: Testacular server started at http://localhost:9876/
info (launcher): Starting browser ChromeCanary
info (Chrome 25.0): Connected on socket id 5YZA2fSuNXjmI-yRFGF6
Chrome 25.0 Simple should compare strings FAILED
        expect undefined toBe "foo"
        /Users/iwein/projects/epec/spa/tests/sample.js:3:9: expected "foo" but was undefined
Chrome 25.0: Executed 1 of 1 (1 FAILED) (0.195 secs / 0.018 secs)

Добавление angular-scenario.js и надежда, что JASMINE-ADAPTER справится с этим.

Я также пытался включить angular-scenario.js сам, но это тупик.

//inside testacular.conf.js
files = [
   JASMINE,
   JASMINE_ADAPTER,
   'tests/lib/angular/angular.js',
   'tests/sample.js'
];

Я получаю вывод:

$ testacular start
info: Testacular server started at http://localhost:9876/
info (launcher): Starting browser ChromeCanary
info (Chrome 24.0): Connected on socket id uEzVQ6tqSu7M7tak4F6v
Chrome 24.0 Array #indexOf() should return -1 when the value is not present FAILED
    Expected true to be false.
    Error: Expected true to be false.
        at null.<anonymous> (/..../tests/sample.js:4:17)
Chrome 24.0: Executed 1 of 1 (1 FAILED) (0.07 secs / 0.004 secs)

Если я добавлю угловой сценарий в смесь:

//inside testacular.conf.js
files = [
  JASMINE,
  JASMINE_ADAPTER,
  'tests/lib/angular/angular.js',
  'tests/lib/angular/angular-scenario.js',
  'tests/sample.js'
];

Тесты вообще не запускаются:

 $ testacular start
 info: Testacular server started at http://localhost:9876/
 info (launcher): Starting browser ChromeCanary
 info (Chrome 24.0): Connected on socket id GcyCTxuvhyFcCaE14BEP
 Chrome 24.0: Executed 0 of 0 SUCCESS (0.116 secs / 0 secs)

У кого-нибудь это нормально работает? Что с true становится undefined?


person iwein    schedule 01.11.2012    source источник


Ответы (2)


Вы не можете смешивать 2 в одной тестовой конфигурации. Что вам нужно сделать, так это подготовить 2 разные тестовые конфигурации: одну для запуска модульных тестов и другую для запуска тестов e2e.

Затем вы должны запустить testacular дважды: сначала для выполнения модульных тестов, а затем тестов e2e. Обычно я запускаю модульные тесты очень, очень часто (при каждом сохранении!), в то время как тесты e2e непосредственно перед фиксацией (поскольку эти тесты выполняются дольше). Мы хотим получить как можно более быструю обратную связь от модульных тестов, в то время как e2e-тесты обеспечивают максимальную безопасность и гарантируют, что части приложений, которые трудно охватить модульными тестами (навигация, пользовательский интерфейс и т. д.), по-прежнему работают правильно.

Это метод, который использует семя AngularJS, вы можете увидеть соответствующие определения здесь: https://github.com/angular/angular-seed/tree/master/config

person pkozlowski.opensource    schedule 01.11.2012
comment
Трудно сказать, не видя вашей установки... Если бы вы могли поделиться своим кодом на GitHub, я мог бы попытаться помочь больше. Со своей стороны у меня без проблем работают как модульные, так и e2e-тесты (используя 2 разных файла конфигурации testacular, как в семени). - person pkozlowski.opensource; 01.11.2012
comment
pkozlowski, проверьте этот вопрос . Я удалю свой комментарий, когда вы это прочитаете. Для голосования нужны люди с репутацией на Karma-Runner - person Sergio; 31.03.2014

Причина, по которой true становится undefined, заключается в том, что вы используете версию angular-scenario expect (не версию Jasmine), которая принимает параметр с именем future, который будет оцениваться как элемент или свойство страницы после загрузки страницы.

Angular-сценарий ожидает, что параметр future будет объектом со свойством value. Поэтому, когда вы передаете true, он пытается получить доступ к true.value, который оценивается как undefined.

expect({value: true}).toEqual(true); работает нормально.

person Joe Kilner    schedule 08.04.2013