209 похожих чатов

Describe('Users routes', () => { const userProfileMock: User =

{
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);
});
});

Парам декоратор не мокается.

У кого нибудь есть примеры хороших практик для подобного?

5 ответов

3 просмотра

а как сам контроллер выглядит?

Alik-Kotov Автор вопроса
Max Kiner
а как сам контроллер выглядит?

@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
@Controller('users') export class UsersController ...

Так и кинь ему мок юзера в аргументах

Alik-Kotov Автор вопроса
Max Kiner
Так и кинь ему мок юзера в аргументах

ну да тут ничего и не остается. как только кинуть ему мок юзера и ожидать, что он отдаст 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); } Тут видимо тоже полиции, миддварии не мокаем. а просто даем в контроллер трек и дто и ждем ответа в виде отредактированного трека Верно понимаю?

Alik Kotov
ну да тут ничего и не остается. как только кинуть ...

Это зависит от того, что конкретно ты пытаешься протестить

Похожие вопросы

Карта сайта