我有一个组件 . 它的值为@Input . 如果调用onDelete()方法,则会有一个EventEmitter,它将发出放入的值 . 我正在尝试为此组件编写测试,并且我从 Launcher 获取的值是未定义的,而不是我传递的值 .
这是测试:
import { CheckedComponent } from '../checked/checked.component';
describe('CheckedComponent', () => {
it('emits the input value on delte', () => {
let total = null;
const component = new CheckedComponent();
component.item = 'example';
component.delete.subscribe(item => {
total = item;
});
component.onDelete()
console.log("HERE", total)
expect(total).not.toBeNull();
// expect(total).toEqual('example');
});
});
注释行不起作用 . 总数等于“未定义”,而非“示例” . 有趣的是,如果我是console.log(component.item),我仍然会获得“示例”数据 .
这是实际的组件:
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
templateUrl: './checked.component.html',
selector: 'checked',
styleUrls: ['./checked.component.css']
})
export class CheckedComponent {
@Input('item') item;
@Output() delete = new EventEmitter()
onDelete() {
this.delete.emit(this.item.value)
}
}
不知道我在这里做错了什么 . 在Angular 4中测试半新 . 任何指导都将不胜感激 . 谢谢!
2 回答
当您发出
this.delete.emit(this.item.value)
时,需要在单元测试中为item
分配适当的值 . 更新您的单元测试代码,如下所示 .您应该期望subscribe方法中的值 . 因为“total”的值可能会在以后的时间分配“item”的值 .
问题是组件期望具有VALUE的对象,而不是纯值 . 这解决了它:
component.item = {value:'example'};