본문 바로가기
Back-end/nest.js

Nest.js : Test시 Controller의 Decorator정보를 얻는 법

by hsloth 2023. 2. 7.

 

Controller의 테스트 코드를 작성 중에 문득, @UseGuards(LocalAuthGuard) 데코레이터를 검증하고 싶었다.

그래서 방법을 찾아본 결과 다음 방법을 사용해서 검증을 해볼 수 있었다. 하지만, 쓸모가 있는지는 아직 잘 모르겠다.

혹시 참고하실 분들은 참고하시길 바랍니다.

 

// 컨트롤러의 logIn 함수로 부터 Decorator들의 key값들을 얻는다.
const keys = Reflect.getMetadataKeys(AuthController.prototype.logIn);

// key값을 이용해서 Decorator data를 뽑아낸다.
// 아직 어떤식으로 활용해야할지는 잘 모르겠다.
keys.forEach((el) => {
	const value = Reflect.getMetadata(el, AuthController.prototype.logIn);
    console.log(value);
});

---

// 아래는 @UserGuards를 검증하는 로직이다.
// 근데 이게 쓸모가 있나...?
    const guards = Reflect.getMetadata(
      '__guards__',
      AuthController.prototype.logIn,
    );
    const guard = new guards[0]();

    expect(guard).toBeInstanceOf(LocalAuthGuard);

 

TDD를 해보려고 이것저것 건드려보고 있는데... 꽤 어렵다.

지금은 Controller의 함수를 사용하면 거기에 따른 pipe들(데코레이터들)도 자동으로 걸러지는 그런 방법이 없을까 고민중이다.