Тесты не будут запускаться после обновления до Angular 6 с CLI

Обновите проект Angular 5 с веб-пакетом до Angular 6 с помощью интерфейса командной строки Angular. Теперь тесты не запускаются со следующей ошибкой.

Chrome 66.0.3359 (Mac OS X 10.13.4): Executed 0 of 0 SUCCESS (0 secs / 0 secs)
Chrome 66.0.3359 (Mac OS X 10.13.4) ERROR
   An error was thrown in afterAll
Chrome 66.0.3359 (Mac OS X 10.13.4) ERROR
  An error was thrown in afterAll
  Uncaught TypeError: env.catchExceptions is not a function
Chrome 66.0.3359 (Mac OS X 10.13.4): Executed 0 of 0 ERROR (0 secs / 0 secs)
Chrome 66.0.3359 (Mac OS X 10.13.4) ERROR
  An error was thrown in afterAll
Chrome 66.0.3359 (Mac OS X 10.13.4): Executed 0 of 0 ERROR (0.006 secs / 0 secs)

Я изменил свой контекст в test.ts, так что вместо запуска всех моих тестов он просто запускал один тест, который я настроил, и он все еще терпит неудачу с той же ошибкой.

test.ts

// This file is required by karma.conf.js and loads recursively all the .spec and framework files

import 'zone.js/dist/zone-testing';
import 'rxjs-compat';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';

declare const require: any;

// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
// Then we find all the tests.

// const context = require.context('./', true, /\.spec\.ts$/);
const context = require.context('./', true, /\.fake-test\.ts$/);
// And load the modules.
context.keys().map(context);

поддельные-test.ts

describe('fakeTest', () => {
    it('fakeAssert', () => {
        expect(true).toBe(true);
    });
});

Вот соответствующие версии в package.json

"@angular/cli": "6.0.0",
"@angular/compiler-cli": "6.0.0",
"@angular-devkit/build-angular": "~0.6.0",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~1.7.1",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~1.4.2",
"karma-jasmine": "~1.1.1",
"karma-jasmine-html-reporter": "^0.2.2",

Вот еще несколько логов с кармой, установленной на LOG_DEBUG:

15 05 2018 08:39:25.913:DEBUG [middleware:source-files]: Requesting /_karma_webpack_/scripts.js /
15 05 2018 08:39:25.913:DEBUG [middleware:source-files]: Fetching /_karma_webpack_/scripts.js
15 05 2018 08:39:25.914:DEBUG [middleware:source-files]: Requesting /_karma_webpack_/vendor.js /
15 05 2018 08:39:25.914:DEBUG [middleware:source-files]: Fetching /_karma_webpack_/vendor.js
15 05 2018 08:39:25.914:DEBUG [middleware:source-files]: Requesting /_karma_webpack_/main.js /
15 05 2018 08:39:25.914:DEBUG [middleware:source-files]: Fetching /_karma_webpack_/main.js
Chrome 66.0.3359 (Mac OS X 10.13.4): Executed 0 of 0 ERROR (0.004 secs / 0 secs)
15 05 2018 08:39:26.139:DEBUG [karma]: Run complete, exiting.
15 05 2018 08:39:26.140:DEBUG [launcher]: Disconnecting all browsers

Вот изображение моего запуска тестов в Chrome, показывающее 0 из 0 тестов... но в исходнике справа вы можете ясно увидеть тест.

введите здесь описание изображения

У меня есть еще один новый проект Angular 6, использующий CLI, и он работает. Я не смог выявить какие-либо существенные различия.


person Ryan Langton    schedule 15.05.2018    source источник
comment
Можешь попробовать повысить карму до ~2.0.0?   -  person sabithpocker    schedule 15.05.2018
comment
в вашем test.js context.keys().map(context); последняя строка?   -  person Nadhir Falta    schedule 15.05.2018
comment
да, это последняя строка.. попытка karma 2.0.0 приводит к тому же, я обновлю версии в вопросе   -  person Ryan Langton    schedule 15.05.2018


Ответы (2)


В вашем test.ts отсутствует строка, которая запускает Karma:

// Finally, start Karma to run the tests.
__karma__.start();

Ваш test.ts должен выглядеть примерно так (обратите внимание на последнюю строку):

// This file is required by karma.conf.js and loads recursively all the .spec and framework files

import 'zone.js/dist/long-stack-trace-zone';
import 'zone.js/dist/proxy.js';
import 'zone.js/dist/sync-test';
import 'zone.js/dist/jasmine-patch';
import 'zone.js/dist/async-test';
import 'zone.js/dist/fake-async-test';
import { getTestBed } from '@angular/core/testing';
import {
  BrowserDynamicTestingModule,
  platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';

// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any.
declare let __karma__: any;
declare let require: any;

// Prevent Karma from running prematurely.
// tslint:disable-next-line
__karma__.loaded = function () {
  //leave this empty
};

// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
  BrowserDynamicTestingModule,
  platformBrowserDynamicTesting()
);
// Then we find all the tests.
const context: any = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);
// Finally, start Karma to run the tests.
__karma__.start();
person Nadhir Falta    schedule 15.05.2018
comment
это не требуется, у меня есть новый проект без karma.start() который работает.. angular cli запускает его под капотом.. спецификации почему-то не найдены, хотя я их вижу в моих исходных файлах (отладчик Chrome) - person Ryan Langton; 15.05.2018
comment
Я слышал, что есть некоторые проблемы совместимости между jasmine-core и karma-jasmine. попробуйте эти версии и посмотрите jasmine: 2.5.2, jasmine-core: 2.5.2, jasmine-spec-reporter: 4.2.1, karma-jasmine: 1.1.2, - person Nadhir Falta; 16.05.2018
comment
спасибо за информацию о версии, @NadhirFalta. Мне также понадобился: karma-jasmine-html-reporter: 0.2.2 - person Dr. C. Hilarius; 11.06.2018

Таким образом, регулярное выражение неверно, вместо этого

\.fake-test\.ts$

is

fake-test\.ts$

в основном вы ждете "." перед "подделкой" .fake-test.ts

Я надеюсь, что это будет полезно.

person Maicon Santana    schedule 14.06.2018