Угловой компонент тестирования с фиктивной структурной директивой терпит неудачу - PullRequest
0 голосов
/ 20 сентября 2019

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

Следующий тест завершается неудачно с сообщением:

Привязка свойства appSome не используется ни одной директивойна встроенном шаблоне.Убедитесь, что имя свойства написано правильно, и все директивы перечислены в «@ NgModule.declarations».("[ОШИБКА ->] ТЕСТ

Я издеваюсь над структурной директивой SomeDirective с SomeMockDirective, определенной в app.component.spec.ts. Проверка не пройдена .

Если я переключаю объявления так, чтобы вместо них содержалось SomeDirective - , тест проходит .

Мне интересно, почему я не могу заставить его работать с проверенной версией.

Шаблон:

<h1 *appSome="true">TEST</h1>

Директива (вид продукции :)):

@Directive({
  selector: '[appSome]'
})
export class SomeDirective implements OnDestroy {
  show: boolean;
  ...
}


Тест:

import { TestBed, async } from '@angular/core/testing';
import { AppComponent } from './app.component';
import { Directive, NO_ERRORS_SCHEMA } from '@angular/core';

@Directive({
  selector: '[appSome]'
})
export class SomeMockDirective {}

describe('AppComponent', () => {
  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [AppComponent, SomeMockDirective], // test is failing, switch the directive to SomeDirective and it passes
      schemas: [NO_ERRORS_SCHEMA]
    }).compileComponents();
  }));

  it('should create the app', () => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.debugElement.componentInstance;
    expect(app).toBeTruthy();
  });
});

Репродукция репо: https://github.com/felikf/angular-test-directive

git clone https://github.com/felikf/angular-test-directive.git 
npm i
ng test

У меня вопрос: почему не работает максируемая версия, даже если макетная версия указана в providers: [] и директива имеет тот же селектор?

1 Ответ

2 голосов
/ 20 сентября 2019

Смоделированная версия не работает, потому что вы не определили appSome свойство ввода:

@Directive({
  selector: '[appSome]'
})
export class SomeMockDirective {
  @Input() appSome;  <================= add this
}
...