{
                  
                  
                      id: 1,
                  
                  
                      isAdmin: false,
                  
                  
                      username: 'testuser',
                  
                  
                      email: 'testuser@example.com',
                  
                  
                      password: 'password',
                  
                  
                      firstName: 'John',
                  
                  
                      lastName: 'Doe',
                  
                  
                      gender: Genders.MALE,
                  
                  
                      activationToken: null,
                  
                  
                      ativatedAt: new Date(),
                  
                  
                      createdAt: new Date(),
                  
                  
                      updatedAt: new Date(),
                  
                  
                    };
                  
                  
                  
                  
                  
                    const userProfileMockFactory = () => userProfileMock;
                  
                  
                    const ctx = {
                  
                  
                      switchToHttp: () => ({
                  
                  
                        getRequest: () => ({
                  
                  
                          userProfile: userProfileMock,
                  
                  
                        }),
                  
                  
                      }),
                  
                  
                    };
                  
                  
                    const userProfileMockDecorator = UserProfile(
                  
                  
                      userProfileMockFactory,
                  
                  
                      ctx as ExecutionContext,
                  
                  
                    );
                  
                  
                  
                  
                  
                    it('should return user by ID', async () => {
                  
                  
                      const result = await usersController.getUserById(
                  
                  
                        userProfileMockDecorator,
                  
                  
                      );
                  
                  
                  
                  
                  
                      expect(result.username).toEqual(userProfileMock.username);
                  
                  
                    });
                  
                  
                  });
                  
                  
                  
                  
                  
                  Парам декоратор не мокается. 
                  
                  
                  
                  
                  
                  У кого нибудь есть примеры хороших практик для подобного?
                  
                  
                
а как сам контроллер выглядит?
 Alik
                          Kotov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Alik
                          Kotov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  @Controller('users') export class UsersController { constructor(private tracksService: TracksService) {} @Public() @Get(':id') @UseInterceptors(ClassSerializerInterceptor) async getUserById(@UserProfile() userProfile: User): Promise<UserEntity> { return new UserEntity(userProfile); } Он просто возвращает то, что получил в декораторе. А выбирается юзер в миддваре
Так и кинь ему мок юзера в аргументах
 Alik
                          Kotov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Alik
                          Kotov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  ну да тут ничего и не остается. как только кинуть ему мок юзера и ожидать, что он отдаст UserEntity. @Public() @Get(':id/tracks') @UseInterceptors(TransformTrackInterceptor) async getUserTracks( @UserProfile() userProfile: User, @IsOwner() isOwner: boolean, ): Promise<Track[]> { const tracks: Track[] = await this.tracksService.getTracksByUser( userProfile, isOwner, ); return tracks; } Тут видимо тоже саму логику, что в зависимости от владельца отдаем те или иные треки нет смысла тестировать. А просто кинули юзера и isOwner получили некие треки. По крайней мере на уровне теста контроллера. Само по себе определение владельца в декораторах и миддварях мокать и тестировать пока не буду. Достаточно думаю интеграционного теста. @ApiOperation({ summary: 'Edit track info' }) @Put(':id/editInfo') @CheckPolicies(EditTrackHandler) @UseGuards(PoliciesGuard) @UseInterceptors(ClassSerializerInterceptor) async editInfo( @Body() editTrackInfoDto: EditTrackInfoDto, @Req() request: RequestWithTrack, ): Promise<TrackEntity> { const track: Track = request.track; const updatedTrack = await this.tracksService.editInfo( track, editTrackInfoDto, ); return new TrackEntity(updatedTrack); } Тут видимо тоже полиции, миддварии не мокаем. а просто даем в контроллер трек и дто и ждем ответа в виде отредактированного трека Верно понимаю?
Это зависит от того, что конкретно ты пытаешься протестить
Обсуждают сегодня