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 ответов

16 просмотров

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

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
ну да тут ничего и не остается. как только кинуть ...

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

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

Обсуждают сегодня

@Benzenoid can you tell me the easiest, and safest way to bu.y HEX now?
Živa Žena
20
This is a question from my wife who make a fortune with memes 😂😂 About the Migration and Tokens: 1. How will the old tokens be migrated to the new $LGCYX network? What is th...
🍿 °anton°
2
What is the Dex situation? Agora team started with the Pnetwork for their dex which helped them both with integration. It’s completed but as you can see from the Pnetwork ann...
Ben
1
Anyone knows where there are some instructions or discort about failed bridge transactions ?
Jochem
21
@lozuk how do I get my phex copies of my ehex from a atomic wallet, to move to my rabby?
Justfrontin 👀
11
Hello, Is iExec also part of the "inception program" or another one ? Would it be a name to qualified the nature of the relationship between iExec and Nvidia? And does Secret ...
Ñïķøłäś
8
Ready for some fun AND a chance to win TKO Tokens? Join us for exciting minigames in our Telegram group! 🕒 Don’t miss out—games start on today 25 October 2024, at 8 PM! Ge...
Milkyway | Tokocrypto
255
any reference of this implementation?
BitBuddha
29
Also, why can’t the community have a vote/ say when it comes to initiatives like buybacks. Isn’t the point of crypto decentralisation? Don’t we deserve input as long term supp...
👨🏽‍🦰
13
Hi guys, any problem with Pulsebrige? Trying to transfer from wETH to ETH. First it tells me to connect my metamask "through mobile app" not desktop. Then I did and confirmed ...
Snowflakecrypto
13
Карта сайта