Javascript NestJS:Supertest e2e测试跳过序列化程序拦截器

Javascript NestJS:Supertest e2e测试跳过序列化程序拦截器,javascript,typescript,nestjs,supertest,Javascript,Typescript,Nestjs,Supertest,我正在使用supertest测试一个AuthenticationController。为此,我使用与我在主文件main.ts中使用的配置相同的配置来模拟我的应用程序: //authentication.controller.ts 描述(“身份验证控制器”,()=>{ let-app:不适用; beforeach(异步()=>{ 用户数据={ …莫克杜塞, }; const userRepository={ create:jest.fn().mockResolvedValue(userData),

我正在使用supertest测试一个
AuthenticationController
。为此,我使用与我在主文件
main.ts中使用的配置相同的配置来模拟我的应用程序:

//authentication.controller.ts
描述(“身份验证控制器”,()=>{
let-app:不适用;
beforeach(异步()=>{
用户数据={
…莫克杜塞,
};
const userRepository={
create:jest.fn().mockResolvedValue(userData),
保存:jest.fn().mockReturnValue(Promise.resolve()),
};
const module=await Test.createTestingModule({
控制器:[……],
提供者:[……],
}).compile();
app=module.createNestApplication();
app.useGlobalPipes(新的ValidationPipe());
app.useGlobalInterceptors(新的ClassSerializerInterceptor(app.get(Reflector));
等待app.init();
});
});
这通常是有效的,但每当我测试一个不应该返回密码或id的控制器时(例如,由于实体定义中的
@Exclude()
装饰器),测试仍然会将其返回给我

在Postman上手动测试端点仍然很有效


有人知道是什么导致了这个问题吗?

我刚刚从NestJS的一位开发者那里得到了一个关于他们官方不和的答案:

事实证明,错误来自这样一个事实:在我的userRepository中模拟
create
的返回值时,我实际上返回的是一个对象,而不是一个类的实例。因此,必须更换以下线路:

const userRepository={
create:jest.fn().mockResolvedValue(userData),
保存:jest.fn().mockReturnValue(Promise.resolve()),
};
通过以下方式:

const userRepository={
create:jest.fn().mockResolvedValue(新用户(用户数据)),
保存:jest.fn().mockReturnValue(Promise.resolve()),
};

通过简单地返回一个对象,不考虑装饰器,因此必须返回一个类实例。

我一直在与您一起学习相同的教程,感谢您在这里发布此教程。我还对创建TypeORM实体的类实例感到困惑,但我通过在类上创建构造函数来解决这个问题。我不知道这是否是正确的解决方案,但至少它是有效的。