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

NestJS测试模块中nestjsx-automapper的profiles未找到问题咨询

NestJS单元测试集成nestjsx-automapper可行解决方案

除导入profiles外,还有两种常用的解决方案:

  • 直接在测试模块的providers中注册Profile类
    nestjsx-automapper的Profile本身是可注入类,直接将其添加到测试模块的providers数组即可完成映射规则加载,不需要额外导入封装了Profile的业务模块,对应调整后的测试代码如下:
describe('UserController', () => {
  let userServiceInterface: UserServiceInterface;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      imports: [AutomapperModule.withMapper('user')],
      providers: [
        UserProfile, // 替换为你实际用到的Profile类即可
        {
          provide: 'UserServiceInterface',
          useClass: UserService,
        },
      ],
    }).compile();

    userServiceInterface = app.get<UserServiceInterface>(
      'UserServiceInterface',
    );
  });

  describe('find', () => {
    it(`should return user with name 'pipo'`, () => {
      const user = userServiceInterface.find('pipo');
      expect(user.username).toBe('pipo');
    });
  });
});

使用该方案时需要注意:@Profile()装饰器指定的mapper名称,与AutomapperModule.withMapper()传入的名称保持一致。

  • Mock Automapper实例
    如果你的测试逻辑不需要验证映射规则本身的正确性,仅需测试服务的业务逻辑,可以直接mock Mapper实例,不需要初始化真实的Automapper模块,测试执行效率更高,对应代码示例如下:
import { getMapperToken } from '@nestjsx/automapper';

describe('UserController', () => {
  let userServiceInterface: UserServiceInterface;
  // 按你的映射需求自定义mock映射逻辑
  const mockMapper = {
    map: jest.fn(() => ({
      username: 'pipo'
    }))
  };

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      providers: [
        {
          provide: 'UserServiceInterface',
          useClass: UserService,
        },
        {
          provide: getMapperToken('user'), // 传入你的mapper名称获取对应的注入token
          useValue: mockMapper
        }
      ],
    }).compile();

    userServiceInterface = app.get<UserServiceInterface>(
      'UserServiceInterface',
    );
  });

  describe('find', () => {
    it(`should return user with name 'pipo'`, () => {
      const user = userServiceInterface.find('pipo');
      expect(user.username).toBe('pipo');
    });
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:42:02