You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jest报错:测试套件必须包含至少一个测试的问题求助

解决Jest报错"Your test suite must contain at least one test"(明明存在测试用例)

你遇到的问题并非嵌套describe要求最外层必须有测试,而是测试前置钩子beforeEach执行时抛出了未捕获的错误,导致Jest误判测试套件没有有效测试用例,后续测试显示"通过"是钩子执行失败后Jest的异常表现。

问题代码分析

看你嵌套describe里的beforeEach逻辑:

beforeEach(async () => {
  const user: Partial<User> & Response =
    await usersController.findOneById(mockResponse, userStub().userId);
  console.log('user', user);
});

这里直接调用了控制器的findOneById方法,但你仅mock了依赖的Model,未对usersService.findOneById的具体实现做mock,实际执行时这个服务方法会因为无有效实现抛出错误,导致beforeEach执行失败。Jest会将钩子执行失败的测试块标记为无效,因此抛出"Your test suite must contain at least one test"的错误。

解决方案

  1. Mock服务方法的返回值
    在执行控制器方法前,先mockusersService.findOneById的返回,确保控制器调用不会出错:

    describe('findOneById', () => {
      describe('when findOneById is called', () => {
        beforeEach(async () => {
          // 先mock服务方法,返回预设的用户数据
          jest.spyOn(usersService, 'findOneById').mockResolvedValue(userStub());
          // 修正类型:控制器方法返回用户数据,而非Response
          const user: Partial<User> = await usersController.findOneById(mockResponse, userStub().userId);
          console.log('user', user);
        });
    
        it('then it should call usersService', () => {
          expect(usersService.findOneById).toBeCalledWith(userStub().userId);
        });
      });
    });
    
  2. 修正类型错误
    代码中Partial<User> & Response的类型定义不合理:findOneById接收mockResponse(模拟res对象)作为参数,返回的是用户数据,并非Response类型,需修正类型避免潜在问题。

  3. 简化嵌套层级(可选)
    过多的嵌套describe会增加逻辑复杂度,可适当合并层级:

    describe('findOneById', () => {
      beforeEach(async () => {
        jest.spyOn(usersService, 'findOneById').mockResolvedValue(userStub());
        await usersController.findOneById(mockResponse, userStub().userId);
      });
    
      it('calls usersService.findOneById with correct userId', () => {
        expect(usersService.findOneById).toBeCalledWith(userStub().userId);
      });
    });
    

验证效果

修改后重新运行测试,beforeEach能正常执行,Jest会正确识别测试用例,报错信息会消失,测试结果也会准确反映实际执行情况。

内容的提问来源于stack exchange,提问作者sikarak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:25:25