testing - 试图用 Jest 测试我的嵌套 api,返回未定义

标签 testing jestjs nestjs

我正在尝试使用 NestJs 框架创建 Jest 测试。

测试应检查 Controller 和服务,但是 1) Controller 未定义,2) 服务未定义。

这是我的home-cards.controller.spec.ts中的代码:

describe('HomeCardsController', () => {
    let homeCardsController: HomeCardsController;
    let homeCardsService: HomeCardsService;

    beforeEach(async () => {
        const module = await Test.createTestingModule({
            imports: [TypeOrmModule.forFeature([HomeCard])],
            controllers: [HomeCardsController],
            providers: [HomeCardsService]
        }).compile();

        homeCardsController = module.get<HomeCardsController>(HomeCardsController);
        homeCardsService = module.get<HomeCardsService>(HomeCardsService);
    });

    describe('findall', () => {
        it('should return an array of home cards', async () => {
            expect( await homeCardsController.findAll(1000)).toBeInstanceOf(Array);
        });
    });
});

错误:

Controller 请求用户的新错误:

TypeError: Cannot read property 'clientId' of undefined

      17 |   async findAll(@Req() request): Promise<HomeCard[]> {
      18 |       const user: AuthUser = request.user;
    > 19 |       return await this.homeCardsService.findAll(user.clientId);
         |                                                       ^
      20 |   }
      21 | 
      22 |   @Get(":id")

最佳答案

您必须模拟调用 HomeCardsController 的 HomeCardsService 方法

import { HomeCardService } from './home-cards.service.ts'; // your path to service
jest.mock('./home-cards.service.ts'); // your path to service

describe('HomeCardsController', () => {
    let homeCardsController: HomeCardsController;
    let homeCardsService: HomeCardsService;

    beforeEach(async () => {
        const module = await Test.createTestingModule({
            // imports: [TypeOrmModule.forFeature([HomeCard])], <- unit test don't need database, mock all
            controllers: [HomeCardsController],
            providers: [HomeCardsService]
        }).compile();

        homeCardsController = module.get<HomeCardsController>(HomeCardsController);
        homeCardsService = module.get<HomeCardsService>(HomeCardsService);
    });

    describe('findall', () => {
        it('should return an array of home cards', async () => {
            const result = []; // some result for mock method
            jest.spyOn(homeCardsService, 'findAll').mockImplementation(() => result);
            const request = {user: {clientId: 1000}}
            expect( await homeCardsController.findAll(request)).toBeInstanceOf(Array);
        });
    });
});

关于testing - 试图用 Jest 测试我的嵌套 api,返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55966601/

相关文章:

Python unittest 没有运行指定的测试

javascript - 在 Jest 中调用 React 的 this.props.onClick(this) 时到底应该测试什么?

node.js - 仅登录 1 个谷歌帐户时,Passport Google Oauth2 不提示选择帐户

dependency-injection - nestjs 全局 pubsub 实例和依赖注入(inject)

nestjs - 未找到连接 "default"- TypeORM、NestJS 和外部 NPM 包

testing - 处理回归测试中的预期变化

unit-testing - 测试优化

testing - Rust:如何模拟 request::Result?

unit-testing - 通过 jest mock 测试 catch block

javascript - 我不能用 Jest 运行多个测试文件?