Тесты терпят неудачу после Angular 2 RC5
Я использовал следующий формат для своих тестов:
export function main() {
describe('Angular2 component test', function() {
it('should initialize component',
async(inject([TestComponentBuilder], (tcb: TestComponentBuilder) => {
var template = '<specific-component-tag>';
return tcb.overrideTemplate(TestComponent, template)
.createAsync(TestComponent)
.then((fixture) => {
expect(fixture.componentInstance.viewChild).toBeDefined();
fixture.detectChanges();
expect(fixture.componentInstance.viewChild.items.length).toBe(1);
// .... etc.
}).catch (reason => {
console.log(reason);
return Promise.reject(reason);
});
})));
});
}
Ответы
Ответ 1
Импорт Jasmine, доступный через @ angular/core/testing, удаляется. Поэтому удалите импорт для следующих
До:
import {
beforeEach,
beforeEachProviders,
describe,
expect,
it,
inject,
} from '@angular/core/testing';
после
/// <reference path="../../../typings/main/ambient/jasmine/index.d.ts" />
import {
inject, addProviders
} from '@angular/core/testing';
Путь ссылки должен быть первой строкой в файле, и он должен указывать на файл определения типа жасмина. (Обновите относительный уровень вверх, т.е. На../../на что угодно). Чтобы получить отклонения типа жасмина, добавьте следующую строку в ambientDevDependencies. Моя выглядит примерно так.
{
"ambientDevDependencies": {
"angular-protractor": "registry:dt/angular-protractor#1.5.0+20160425143459",
"jasmine": "registry:dt/jasmine#2.2.0+20160412134438",
"selenium-webdriver": "registry:dt/selenium-webdriver#2.44.0+20160317120654"
},
"ambientDependencies": {
"es6-shim": "registry:dt/es6-shim#0.31.2+20160317120654"
}
}
Также измените
beforeEachProviders(() => [InMemoryDataService]);
to
import { TestBed } from '@angular/core/testing';
...
describe('...', () => {
TestBed.configureTestingModule({
providers: [ InMemoryDataService ]
});
it(...);
});
Ответ 2
Взгляните на журнал изменений:
https://github.com/angular/angular/blob/master/CHANGELOG.md
Похоже, что API, который вы используете, устарел - путь и имена изменились.:)
Например:
- TestComponentBuilder и ComponentFixture теперь находятся в @ angular/core/testing,
- beforeEachProviders:
код:
beforeEachProviders(() => [MyService]);
изменено на:
beforeEach(() => {
addProviders([MyService]);
});
Ответ 3
Если вы уже прочли примечание к выпуску. Это большое изменение в тестировании пакета API.
https://github.com/angular/angular/blob/master/CHANGELOG.md#breaking-changes
Итак, я еще не пытался переносить тест на RC5. Но я нашел ссылку об изменении на новый API тестирования.
https://ng2-info.github.io/2016/08/ angular -2-rc-5/# テ ス テ ィ ン グ api に 関 す る 変 更
Надеюсь на эту помощь.