我正在尝试测试组件中的主题更改,但覆盖范围从未进入订阅功能。
标题栏-search.component.ts
export class TitlebarSearch implements OnInit {
@ViewChild('titleSearchInput') titleSearchInputEl: any;
@Input() inputValue: string;
@Output() searchText = new EventEmitter<string>();
searchChange: Subject<string> = new Subject<string>();
constructor(private renderer: Renderer) {
}
/**
* Waits a time before send the text to search
*
* @protected
* @memberof TitlebarSearch
*
*/
protected prepareSearchInput() {
this.searchChange.debounceTime(500).subscribe(value => {
this.searchText.emit(value);
});
}
/**
* Send the text to the searchChange Observable
*
* @param {string} text
* @memberof TitlebarSearch
*/
public doSubmit(text:string){
this.searchChange.next(text);
}
}
标题栏-search.component.spec.ts
describe('Titlebar Search tests', () => {
let fixture;
let titlebarComponent;
beforeEach(async(() => {
//Creates a UserService using a mock class
TestBed.configureTestingModule({
declarations: [TitlebarSearch],
imports: [FormsModule],
//CUSTOM_ELEMENTS_SCHEMA to solve html elements issues
schemas: [ CUSTOM_ELEMENTS_SCHEMA ],
providers: [Renderer]
}).compileComponents().then(() => {
fixture = TestBed.createComponent(TitlebarSearch);
titlebarComponent = fixture.componentInstance
});
}));
//specs
it('should send the text to detect the change', async((done) => {
const text = "Changed text";
titlebarComponent.doSubmit(text);
fixture.detectChanges();
titlebarComponent.searchChange.subscribe(textRecived => {
expect(textRecived).toEqual(text);
done();
})
}));
});
doSubmit 方法在输入文本发生更改时调用。然后,prepareSearchInput 订阅了该主题,以通过 debounce 获取下一个并输出相同的文本。
我不知道测试中的错误在哪里,但覆盖范围从未涵盖订阅代码。Internet上的示例对我没有帮助。