- 
          
 - 
                Notifications
    
You must be signed in to change notification settings  - Fork 8.1k
 
Description
Is there an existing issue for this?
- I have searched the existing issues
 
Current behavior
When a Controller depends on a Decorator with a Pipe that requires REQUEST to be Injected, and the testing module does not include a provider for REQUEST it runs the tests with the controller's dependencies as undefined. For Instance:
    const module: TestingModule = await Test.createTestingModule({
      controllers: [MyController],
      providers: [
        {
          provide: LoggerService,
          useValue: {
            assign: jest.fn(),
            log: jest.fn(),
          },
        },
        // We provide the pipe, but...
        GetUserPipe,
        // MISSING: REQUEST provider that GetUserPipe needs via @Inject(REQUEST)!
        // Without REQUEST, the pipe constructor gets 'undefined' for this.req
      ],
    }).compile();
@Controller('api')
export class MyController {
  constructor(private readonly logger: LoggerService) {}
  @Get('data')
  async getData(@User() user: UserDto): Promise<any> {
    // This line will show in the error, making it seem like the issue is here
    this.logger.assign({ userId: user.id, userName: user.name });
    
    return { message: `Hello user ${user.id}` };
  }
}
Will result in the following error.
    TypeError: Cannot read properties of undefined (reading 'assign')
      15 |   async getData(@User() user: UserDto): Promise<any> {
      16 |     // This line will show in the error, making it seem like the issue is here
    > 17 |     this.logger.assign({ userId: user.id, userName: user.name });
         |                 ^
      18 |     
      19 |     return { message: `Hello user ${user.id}` };
      20 |   }
      at MyController.getData (my.controller.ts:17:17)
      at Object.<anonymous> (my.controller.spec.ts:44:22)
As you can see the logger is undefined which was provided properly.
Minimum reproduction code
https://github.com/mnalsup/reproduce-undefined-injects
Steps to reproduce
git clone https://github.com/mnalsup/reproduce-undefined-injects.git
cd reproduce-undefined-injects
npm install
npm testExpected behavior
What I would expect is the standard nestjs error that describes that a dependency was unable to be resolved like:
"Nest can't resolve dependencies of the GetUserPipe (?). Please make sure that the argument REQUEST at index [0] is available in the RootTestModule context."
I would also expect that unrelated depenencies would still be resolved like the this.logger in the example.
NestJS version
No response
Packages versions
    "@nestjs/common": "^11.0.0",
    "@nestjs/core": "^11.0.0",
    "@nestjs/testing": "^11.0.0",Node.js version
v20.19.0
In which operating systems have you tested?
- macOS
 - Windows
 - Linux
 
Other
Thanks!