Ich versuche eine Subject-Änderung in meiner Komponente zu testen, aber die Abdeckung tritt nie in die Subskriptionsfunktion ein.Angular Unit Test Observable/Betreff mit Karma
titlebar-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);
}
}
titlebar-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 Die Methode wird aufgerufen, wenn der Eingabetext gewesen geändert. Dann hat prepareSearchInput eine Subskription für das Subjekt, um die nächste mit Debounce zu erhalten und den gleichen Text auszugeben.
Ich weiß nicht, wo ist der Fehler im Test, aber die Abdeckung decken nie den Abonnement-Code. Die Beispiele über das Internet haben mir nicht geholfen.