Это образец resolver
в NestJs, и я собираюсь написать тесты для этого файла. Но нет документации по тестированию распознавателей в документации nestjs.
У меня уже есть тест для моего service
, но в резолверах тоже может быть мало логики, поэтому лучше иметь тесты и для них.
Как я могу протестировать resolver
файлы?
import { ObjectId } from 'mongodb';
import { AuthGuard } from '../utils/Auth.guards';
import { UseGuards } from '@nestjs/common';
import { IUser } from '../users/users.service';
import { User } from '../utils/user.decorator';
import { Query, Resolver, Mutation, Args } from '@nestjs/graphql';
import { AccessService } from './access.service';
import { NeedAccess } from '../utils/needAccess.decorator';
import { HasAccess } from '../utils/access.decorator';
@Resolver('Accesss')
@UseGuards(AuthGuard)
export class AccessResolvers {
constructor(private readonly accessService: AccessService) {}
@Query()
@NeedAccess()
access(
@Args('userId') userId: ObjectId,
@User() user: IUser,
@HasAccess(['access.view']) hasAccess,
) {
if (userId && hasAccess) { // this might be a situation to concern about in tests
return this.accessService.getUserAccess(userId);
} else {
return this.accessService.getUserAccess(user._id);
}
}
}
Ничего, что я решил прямо сейчас, я на самом деле ищу простое решение. Кроме того, здесь может быть полезно знать, как писать модульные тесты или e2e. :) @КимКерн
Между юнит-тестами и e2e-тестами есть принципиальная разница. В юнит-тестах вы хотите протестировать каждый крайний случай одного изолированного юнита, в тесте e2e вы проверяете взаимодействие между вашими юнитами. Оба важны, см. этот ответ для более подробного различия.
Когда вы пишете модульный тест, вы обычно имитируете все зависимости вашего модуля; в случае вашего AccessResolvers
AccessService
, а затем вы тестируете каждый общедоступный метод. Подробный пример использования моков см. в разделе этот ответ (для преобразователей разницы нет).
Но репозиторий и сервисы — это не одно и то же.
Это только я или похоже, что есть опечатка или пропущенные слова в «в случае ваших AccessResolvers AccessService, а затем вы тестируете каждый общедоступный метод»?
Вы хотите написать модульный тест или тест e2e?