Тесты терпят неудачу после 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 に 関 す る 変 更

Надеюсь на эту помощь.