Как издеваться над директивой, тестируя компонент Angular 6 с помощью Jasmine и Karma - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь проверить компонент. Этот компонент зависит от директивы, которая называется Megazord. Мне нужна некоторая синтаксическая справка о том, как использовать директиву mock.

Пример использования сервисов как макет:

TestBed.configureTestingModule({
  declarations: [..., MegazordCanvasDirective],
  providers: [
    {provide: UserService},
    {provide: HttpClient, useClass: HttpClientMock}, // Mock
    {provide: Router, useClass: RouterMock}, // Mock
  ]
}).compileComponents();

Это моя конфигурация TestBed:

beforeEach(async(() => {

TestBed.configureTestingModule({
  declarations: [..., MegazordCanvasDirective],
  ...
}).compileComponents();

Тест:

it('should select level3', () => {
    const level3Mocks = createMockLevel3();
    component.onSelectLevel3(level3Mocks[0]);
    // expect(component.selectedLevel3).toBe(level3Mocks[0]);
    // expect(component.mode).toBe('tagging');
  });

Директивная зависимость:

@ViewChild(MegazordCanvasDirective) public megazord;

Метод:

public onSelectLevel3(level3: Level3): void {
    this.mode = 'tagging';
    this.updateMegazord(); // This one is using Megazord Directive.
    this.manager.clearSearchResults();
    this.onSelectLevel1(level3.level1.id);
    this.onSelectLevel2(level3.level1, level3.level2);
    this.selectedLevel3 = level3;
  }

метод updateMegazord:

private updateMegazord(): void {
    this.megazord.api.toggleCanMask(this.mode === 'masking');
    this.megazord.api.toggleCanTag(this.mode === 'tagging');
  }

Ошибка:

enter image description here

1 Ответ

0 голосов
/ 08 января 2019

J.S. помог мне через комментарий:

Тогда вы должны попытаться переопределить атрибут компонента, чтобы смоделировать его например:

component.megazord = {api: { toggleCanMask: ()=> {}}}

Работает, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...