如何在Jest中测试诺言的诺言?

使用Jest,Typescript,React,MobX,我尝试在Jest中测试以下功能:

  search(searchText: string) : Promise<void> {
    this.searchInputCache = searchText;
    this.searchLoading = true;
    const promises = [] as Promise<any>[];
    const results = {} as {[itemType in DatabaseItemType]: DatabaseItemRef[]};
    for (const [item,checked] of this.filterChecks.entries()) {
      if (checked) {
        promises.push(SearchService.searchForItem(this._rootStore.databaseStore,searchText,item as DatabaseItemType,SearchTypeflags.nxSearchType_Name)
           .then(values => results[item] = values));
      }
    }
    return Promise.all(promises).then(() => this.populateFilterTreeStore(results));

我已经尝试过用await测试它,但是我正在尝试测试内部函数是否正确地这样调用:


 it('searches',() => {
    filterTreeStore.filterChecks.set(DatabaseItemType.Signal,true);
    filterTreeStore.filterChecks.set(DatabaseItemType.Frame,true);
    filterTreeStore.filterChecks.set(DatabaseItemType.ECU,false);
    filterTreeStore.filterChecks.set(DatabaseItemType.PDU,false);
    filterTreeStore.filterChecks.set(DatabaseItemType.Cluster,false);

    const searchText = 'a'; 
    filterTreeStore.search('a').then(() => expect(searchMock).toBeCalledWith(databaseStore,DatabaseItemType.Signal,SearchTypeflags.nxSearchType_Name))
  });

最终,我不断收到TypeError:无论我尝试了什么,都无法读取未定义的属性'then'。

  79 |     for (const [item,checked] of this.filterChecks.entries()) {
  80 |       if (checked) {
> 81 |         return promises.push(SearchService.searchForItem(this._rootStore.databaseStore,SearchTypeflags.nxSearchType_Name)
     |                              ^
  82 |            .then(values => results[item] = values));
  83 |       }
  84 |     } `

任何有关如何测试此功能的建议都将受到赞赏!

xiakaipkq 回答:如何在Jest中测试诺言的诺言?

searchMock需要具有返回值-这解决了该问题。

const itemType = DatabaseItemType.Signal;
const mockSearchResults =
  new MakeListCommand(
    mockSignalrefs,{ itemType,name: getDisplayNameForItemType(itemType) },{ ancestorRefs: [] },true);

searchMock.mockReturnValue(Promise.resolve(mockSearchResults));
本文链接:https://www.f2er.com/3002323.html

大家都在问