Я хочу получить конечную точку с именем nestjs /users
, но я получил ошибку. У меня есть сомнения, как пройти тест с защитой.
Первая ошибка
Nest не может разрешить зависимости UserModel (?). Убедитесь, что аргумент DatabaseConnection по индексу [0] доступен в контексте MongooseModule.
Вторая ошибка
ожидается 200 "ОК", получено 401 "Не авторизовано"
App.module
@Module({
imports: [
MongooseModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
uri: configService.mongoUri,
useNewUrlParser: true,
}),
inject: [ConfigService],
}),
GlobalModule,
UsersModule,
AuthModule,
PetsModule,
RestaurantsModule,
ConfigModule,
],
controllers: [],
providers: [],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(TokenDataMiddleware)
.forRoutes({ path: '*', method: RequestMethod.ALL });
}
}
UsersService
@Injectable()
export class UsersService {
constructor(
@InjectModel('User') private readonly userModel: Model<UserDocument>,
private readonly utilsService: UtilsService,
private readonly configService: ConfigService,
) { }
async getAllUsers(): Promise<UserDocument[]> {
const users = this.userModel.find().lean().exec();
return users;
}
}
Контроллер
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService, private readonly utilsService: UtilsService) { }
@Get()
@ApiBearerAuth()
@UseGuards(JwtAuthGuard)
async users() {
const users = await this.usersService.getAllUsers();
return users;
}
e2e file
describe('UsersController (e2e)', () => {
let app: INestApplication;
beforeAll(async () => {
const testAppModule: TestingModule = await Test.createTestingModule({
imports: [AppModule, GlobalModule,
UsersModule,
AuthModule,
PetsModule,
RestaurantsModule,
ConfigModule],
providers: [],
}).compile();
app = testAppModule.createNestApplication();
await app.init();
});
it('GET all users from API', async () => {
// just mocked users;
const users = getAllUsersMock.buildList(2);
const response = await request(app.getHttpServer())
.get('/users')
.expect(200);
});
afterAll(async () => {
await app.close();
});
});