Настройка базового c модульного теста для angular «провайдера» - PullRequest
0 голосов
/ 17 марта 2020

Я хочу настроить базовый c модульный тест для моего приложения angular, в частности приложения Ioni c. Я использую карму / жасмин, используя предварительно сконфигурированное решение команды ioni c. Включенные примеры модульных тестов пройдены, поэтому я приступил к написанию нового модульного теста для своего собственного провайдера.

Вот где я попадаю в неприятности, потому что нет реального образца, на который можно сослаться. Поэтому я просто создал TestBed и поместил минимально необходимые компоненты, как вы бы сделали с вашим приложением. Однако каждый раз, когда я запускаю модульный тест, возникает довольно расплывчатая и неописуемая ошибка: Error: Illegal state: Could not load the summary for directive TestServiceProvider.

Error: Illegal state: Could not load the summary for directive TestServiceProvider.
            at syntaxError (webpack:///node_modules/@angular/compiler/esm5/compiler.js:486:21 <- karma-test-shim.js:66892:34)
            at CompileMetadataResolver.getDirectiveSummary (webpack:///node_modules/@angular/compiler/esm5/compiler.js:15085:0 <- karma-test-shim.js:81491:31)
            at JitCompiler.getComponentFactory (webpack:///node_modules/@angular/compiler/esm5/compiler.js:34301:25 <- karma-test-shim.js:100707:63)

Глядя на трассировку стека, похоже, что это вызвано SyntaxError. Хотя я не уверен, что и почему это происходит. Есть идеи, что делается неправильно в этом примере?

import { TestServiceProvider } from './test';
import { TestBed, TestModuleMetadata, async, ComponentFixture } from '@angular/core/testing';

describe('Test Service', () => {
  let component: TestServiceProvider;
  let fixture: ComponentFixture<TestServiceProvider>;

  beforeEach(async( () => {
    TestBed.configureTestingModule({
      providers: [TestServiceProvider]
    }).compileComponents;
  }));

  beforeEach( () => {
    fixture = TestBed.createComponent(TestServiceProvider);
    component = fixture.componentInstance;
  });

  it('should add numbers', () => {
    expect(1+1).toBe(2);
  });
});
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';

/*
  Generated class for the TestServiceProvider provider.

  See https://angular.io/guide/dependency-injection for more info on providers
  and Angular DI.
*/
@Injectable()
export class TestServiceProvider {

  constructor() {
    console.log('Hello TestServiceProvider Provider');
  }

}

1 Ответ

0 голосов
/ 17 марта 2020

Вам не нужно создавать экземпляр компонента, поскольку мы просто тестируем сервис. Просто введите его и протестируйте в спецификациях тестирования. Ниже приведен минимальный код, необходимый для начала тестирования.

import { TestServiceProvider } from './test';
import { TestBed, TestModuleMetadata, async, ComponentFixture } from '@angular/core/testing';

describe('Test Service', () => {
  let component: TestServiceProvider;
  let fixture: ComponentFixture<TestServiceProvider>;

  beforeEach(async( () => {
    TestBed.configureTestingModule({
      providers: [TestServiceProvider]
    });
  service = TestBed.inject(TestServiceProvider);
  }));


  it('should add numbers', () => {
    expect(1+1).toBe(2);
  });
});
...