Нет провайдера для TestingCompilerFactory - PullRequest
0 голосов
/ 26 апреля 2018

Это мой тестовый файл, и я пытаюсь определить ошибку, мешающую мне успешно выполнить тест:

    import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { Component, Directive, Input, OnInit } from '@angular/core';
import { TestComponent } from './test.component';
import { NgbDropdownModule, NgbCollapse } from '@ng-bootstrap/ng-bootstrap';
import { CommonModule } from '@angular/common';
import { Routes } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { NO_ERRORS_SCHEMA } from '@angular/core';

import {BrowserDynamicTestingModule, platformBrowserDynamicTesting} from '@angular/platform-browser-dynamic/testing';


let comp: TestComponent;
let fixture: ComponentFixture<MyComponent>;

describe('TestComponent', () => {
   beforeEach(() =>  {
      TestBed.configureTestingModule({
        declarations: [ TestComponent ],
        providers: [
           // DECLARE PROVIDERS HERE
          { provide: TestingCompilerFactory }
        ]
      }).compileComponents()
      .then(() => {
        fixture = TestBed.createComponent(TestComponent);
        comp    = fixture.componentInstance;
      });
    }));
    it('should be created', () => {
      expect(TestComponent).toBeTruthy();
    });

Я получаю эту ошибку, потому что я неправильно ее упаковываю.

error  TS1005: ';' expected. 

Но я также получаю

No provider for TestingCompilerFactory

1 Ответ

0 голосов
/ 27 апреля 2018

Сначала исправьте синтаксическую ошибку 1,2

beforeEach(() => {
  TestBed.configureTestingModule({
    declarations: [TestComponent],
    providers: [{ provide: TestingCompilerFactory }]
  })
  .compileComponents()
  .then(() => {
    fixture = TestBed.createComponent(TestComponent);
    comp = fixture.componentInstance;
  });
}); // excess `)` removed

Теперь, на заметную ошибку

Поставщик может принять две формы.

Первое - это значение, которое действует как предоставленное значение и ключ, под которым оно зарегистрировано. Обычно это принимает форму класса, как в следующем примере

const Dependency = class {};

@NgModule({
  providers: [Dependency]
}) export default class {}

Второй - это объект со свойством provide, определяющим ключ, под которым зарегистрирован поставщик, и одним или несколькими дополнительными свойствами, указывающими предоставляемое значение. Простой пример:

const dependencyKey = 'some key';
const Dependency = class {};

@NgModule({
  providers: [
    {
      provide: dependencyKey,
      useClass: Dependency
    }
  ]
}) export default class {}

Из приведенного выше вы можете сделать вывод, что вам не удалось указать фактическое значение, указанное под ключом TestingCompilerFactory.

Чтобы решить эту проблему, напишите

TestBed.configureTestingModule({
  declarations: [TestComponent],
  providers: [
      {
        provide: TestingCompilerFactory,
        useClass: TestingCompilerFactory
      }
    ]
})

, который является избыточным и может быть заменен на

TestBed.configureTestingModule({
  declarations: [TestComponent],
  providers: [TestingCompilerFactory]
})

как описано выше.

Примечания

  1. В будущем не следует публиковать вопросы, в которых содержится такая очевидная ошибка - исправьте ее самостоятельно.

  2. Не публикуйте два вопроса как один.

...