由于我对RxJ缺乏了解,我复制 - >粘贴使用了一些代码,修改了它,现在无法测试它...
以下是整个组件:
import { Component } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { map } from 'rxjs/operator/map';
import { debounceTime } from 'rxjs/operator/debounceTime';
import { distinctUntilChanged } from 'rxjs/operator/distinctUntilChanged';
import { _catch } from 'rxjs/operator/catch';
import { _do } from 'rxjs/operator/do';
import { switchMap } from 'rxjs/operator/switchMap';
import { of } from 'rxjs/observable/of';
import { ApiService } from '../../services/api/api.service';
import { ISearchSuggestion } from './search.interface';
@Component({
selector: 'msm-search',
templateUrl: './search.component.html'
})
export class SearchComponent {
public model: string;
private _isSearching = false;
get isSearching() { return this._isSearching; }
constructor(
private router: Router,
private apiService: ApiService
) {}
search = (text$: Observable<string>) => {
return _do.call(
switchMap.call(
_do.call(
distinctUntilChanged.call(
debounceTime.call(text$, 300)),
this.enableSearching.bind(this)
),
this.performSearch.bind(this)
),
() => {
this._isSearching = false;
}
);
}
private enableSearching(term: string) {
if (term.length > 2) {
this._isSearching = true;
}
}
private performSearch(term: string) {
if (term.length > 2) {
return _catch.call(
_do.call(this.apiService.getSearchSuggestions(term)),
() => of.call([])
)
}
}
}
我想测试搜索但是既没有setTimeout,也没有jasmine.tick()似乎做了一个技巧,这里是我提出的例子:
it('Should get suggestions if search term is longer than 2 characters', (done) => {
const searchTerm = '123test';
const stringObservable = new Observable<string>(observer => {
setTimeout(() => {
observer.next(searchTerm);
observer.complete();
}, 50);
});
spyOn(apiService, 'getSearchSuggestions');
component.search(stringObservable);
setTimeout(() => {
expect(apiService.getSearchSuggestions).toHaveBeenCalledWith(searchTerm);
done();
}, 500);
});
我做错了什么?
答案 0 :(得分:0)
tick 应该是用来实现
的东西 component.search(stringObservable);
tick(500);
expect(apiService.getSearchSuggestions).toHaveBeenCallediith(searchTerm);
这不起作用?