Хорошо, у меня есть компонент, для которого я пишу несколько тестов.В этом компоненте у меня есть другой компонент, который имеет Input:
@Component({
selector: 'navigator',
templateUrl: './navigator.component.html',
styleUrls: ['./navigator.component.scss'],
})
export class Navigator{
@Input()
public myobject: InputClass;
}
InputClass представляет собой простой объект:
export class InputClass{
public id: string;
public Name: any;
constructor(id: string) {
this.id = id;
}
}
И в главном компоненте у меня есть соответствующее свойство:
@Component({
selector: 'main-component',
templateUrl: './mainComponent.component.html',
styleUrls: ['./mainComponent.component.scss'],
})
export class MainComponent{
public myObject: InputClass;
}
Шаблон mainComponent:
<navigator class="container" [myobject] = "myObject">
</navigator>
Теперь я хочу проверить это, если я установлю какое-то значение в свойстве myObject mainComponent, а затем проверим, имеет ли значение @Input в навигатореполучил значение:
it('set the input in navigator',() => {
let testobj: InputClass;
testobj = {
id: '1',
componentName: 'SomeValue',
};
component.myObject= testobj;
fixture.detectChanges();
el = fixture.debugElement.query(By.css('navigator'));
// For test and debug purposes
let test = el.nativeElement.attributes['ng-reflect-myobject'];
expect(test.value).toBe(testobj);
});
Я пробовал это раньше с другим вводом, кроме типа строки, и когда я устанавливал значение, оно работало как чудо, но здесь это не удается, и когда я отлаживаю его с помощью Chrome Iполучаем, что значением атрибута является [object Object]:
Результат теста
Отладочная информация
Теперь я думаю, что происходит то, что я получаю строковую версию объекта (потому что в jsэто преобразование по умолчанию из объекта в строку, верно?).Если это так, как я могу получить объект из ввода?