Jest :TypeError: (intermediate value) is not iterable

Jest :TypeError: (intermediate value) is not iterable

我有下面两种方法。

searchCertificates()是私有方法,在findAll().

内部调用
   async findAll(queryCertificateDto: QueryCertificateDto): Promise<PaginatedResult> {
        const { data, meta } = await this.searchCertificates(queryCertificateDto);

        return {
            data,
            meta,
        };
    }

    private async searchCertificates(
        queryCertificateDto: QueryCertificateDto
    ): Promise<PaginatedResult> {
        const {
            page,
            take,
            certificateNo,      
            startDate,
            endDate,
        } = queryCertificateDto;
     

        const query = this.certificateRepository.createQueryBuilder('certificate');



        if (certificateNo) {
            query.andWhere('certificate.certificateNo=:certificateNo', { certificateNo });
        }
        if (startDate && endDate) {
            query.andWhere('CAST(certificate.createdAt as Date) BETWEEN :startDate AND :endDate', {
                startDate,
                endDate,
            });
        } else if (startDate) {
            query.andWhere('CAST(certificate.startDate as Date)=:startDate', { startDate });
        } else if (endDate) {
            query.andWhere('CAST(certificate.endDate as Date)=:endDate', { endDate });
        }

        const [certificates, total] = await query
            .orderBy('certificate.certificateNo', 'ASC')
            .take(take)
            .skip((page - 1) * take)
            .getManyAndCount();

        return {
            data: certificates,
            meta: {
                total,
                page,
                last_page: Math.ceil(total / take),
            },
        };
    }

我写了下面的测试用例来覆盖 startDate

useValue: {
                        find: jest.fn().mockReturnValue(certificate),
                        createQueryBuilder: jest.fn(() => ({
                            andWhere: jest.fn().mockReturnValue(certificate),
                            getManyAndCount: jest.fn().mockReturnValueOnce(certificate),
                            orderBy: jest.fn().mockReturnThis(),
                            take: jest.fn().mockReturnThis(),
                            skip: jest.fn().mockReturnThis(),
                            page: jest.fn().mockReturnThis(),
                        })),
                        findOne: jest.fn().mockReturnValue(certificate),
                        save: jest.fn().mockReturnValue(new Certificate()),
                        softRemove: jest.fn().mockReturnValue(new Certificate()),
                    },

下面是测试用例。

  it('return the Certificate list for start date', async () => {
        const queryCertificateDto = new QueryCertificateDto();
        queryCertificateDto.startDate = '23-MAR-2019';
        const result = await service.findAll(queryCertificateDto);
        expect(result['startDate']).toEqual(certificate.startDate);
    });

越来越失败了。

我什至不知道这是为什么。你能帮我理解一下吗?

您的 getManyAndCount 模拟应该 return 一个已解析的值,并且 mockResolvedValueOnce 以便它可以被 await 编辑。它还应该 return 一个值数组,因为您将数组解构为两部分,certificatestotal