Как проверить установку свойства в интерфейсе - PullRequest
0 голосов
/ 26 мая 2020

У меня следующий интерфейс

   export interface Command {
   id: CommandId;
   disabled: boolean;
}

Я хотел бы проверить, что отключенный был вызван / изменен на нем. Я пробовал следующее:

1) Создайте объект и проверьте, не было ли изменено свойство:

const command1: Command = {id: CommandId.Print, disabled: false};
// some stuff inbetween (see below)
expect(command1.disabled).toBe(true);

Результат:

TypeError: Cannot set property 'disabled' of undefined

2) Создайте макет с помощью typemock:

const command1 = Mock.ofType<Command>();
command1.setup(x => x.id).returns(() => CommandId.Print);
// some stuff inbetween (see below)
command1.verify(x => x.disabled, Times.once());

Результат:

TypeError: 'set' on proxy: trap returned falsish for property 'disabled'

3) Использование spyOnProperty:

const command1 = {id: CommandId.Print, disabled: false} as Command;
spyOnProperty(command1, 'disabled');
// some stuff following (see below)

Результат:

Ошибка: свойство отключено нет типа доступа get

У меня нет идей, как проверить такие вещи? (Я новичок в Angular и машинописном тексте)

весь метод тестирования:

// arrange
const command1 = {id: TaskCommandId.Print, disabled: false} as Command;
spyOnProperty(command1, 'disabled');
const command2 = {id: CommandId.SaveTemplate, disabled: false } as Command;
spyOnProperty(command2, 'disabled');

const commands = [command1, command2];
mockService.setup(x => x.getCommands()).returns(() => commands);
const command1Update = {id: CommandId.Print, disabled: true } as CommandState;
component.ngOnInit();

// act
component.updateEnabledState(command1Update);

// assert
expect(command1.disabled).toHaveBeenCalled();
expect(command2.disabled).not.toHaveBeenCalled();

1 Ответ

1 голос
/ 27 мая 2020

toHaveBeenCalled() предназначен для проверки того, была ли вызвана функция, например:

spyOn(component, 'someFn').and.callThrough();
component.ngOnInit();
expect(component.someFn).toHaveBeenCalled();

Вышеупомянутое должно работать с вызовом someFn внутри ngOnInit в вашем компоненте, например:

ngOnInit() {
    someFn();
}
someFn() {
    console.log('1');
}

Чтобы проверить, изменилось ли какое-то property объекта или нет, вы должны проверить это точное свойство, например:

component.obj = {disabled: false};
component.ngOnInit();
expect(component.obj.disabled).toBeTrue();

Вышеуказанное должно работать с следующий код в вашем компоненте:

obj: any;
ngOnInit() {
    this.obj.disabled = true;
}
...