For the complete documentation index, see llms.txt. This page is also available as Markdown.

서비스 테스트 (WKC)

잘 알려진 컴포넌트 서비스는 다음으로 구축된 서버입니다 잘 알려진 컴포넌트 아키텍처로, 서비스의 각 부분이 모듈화되어 컴포넌트 안에 캡슐화됩니다. 이러한 컴포넌트는 서로 쉽게 교체할 수 있을 뿐 아니라, 생성될 때 모든 의존성이 주입되므로 단위 테스트도 쉽게 수행할 수 있습니다.

이러한 서비스는 두 가지 서로 다른 유형의 테스트를 사용하여 테스트해야 합니다, 단위 및 통합. 로직을 포함하는 컴포넌트는 단위 테스트로 테스트해야 하고, 주로 외부 서비스와 상호작용하는 컴포넌트는 통합 테스트로 테스트해야 합니다. 즉, 어떤 로직도 포함하지 않고 대부분 데이터베이스 쿼리만 포함하는 데이터베이스 어댑터 컴포넌트는 반드시 통합적으로 테스트해야 합니다.

잘 알려진 컴포넌트 컴포넌트의 단위 테스트

모든 컴포넌트는 반드시 단위 테스트되어야 하며, 테스트를 작성하는 방법에 대해 여기에서 정의된 섹션을 따라 작성되어야 합니다.

이러한 컴포넌트를 어떻게 테스트하는지 보여주기 위해, 여기 메서드 하나와 두 개의 의존성만 가진 간단한 컴포넌트가 있습니다, settings 및 friends:

// 음성 컴포넌트

export function createVoiceComponent(dependencies: Pick<AppComponents, 'settings' | 'friends'>) {
	const { settings, friends } = dependencies

  async function canCallEachOther(caller: string, callee: string): Promise<boolean> {
	  const [callerSettings, calleeSetting] = Promise.all([settings.getPrivacySetting(caller), settings.getPrivacySetting(callee)])
	  const areFriends = await friends.areUsersFriends(caller, callee)
		return areFriends || (callerSettings !== Settings.ONLY_FRIENDS && calleeSettings !== Settings.ONLY_FRIENDS)
  }
  
  return {
	  createVoiceChat
  }
}

이 컴포넌트를 테스트하려면 적절한 모의 객체를 만들어야 합니다. 즉, 테스트 대상 컴포넌트와 인터페이스할 수 있도록 올바른 타입을 갖고 있고, 다양한 종류의 테스트를 만들 수 있을 만큼 유연한 모의 객체여야 합니다. 이러한 모의 객체는 테스트 간에도 변경 불가능해야 하며, 각 테스트가 다른 테스트로부터 격리된 자신만의 컨텍스트에서 실행된다는 아이디어를 보존해야 합니다.

이러한 모의 객체는 컴포넌트 모의 생성 함수로 만들어져야 하며, 이름은 createComponentNameMockedComponent. 위에서 만든 컴포넌트를 예로 들면, 이들은 다음과 같이 보여야 합니다:

이러한 모의 객체를 신중하게 beforeEach안에 배치하여 사용하면, 테스트의 각 실행 사이에서 모의 객체가 서로 격리된 상태로 올바르게 정의된다는 것을 확신할 수 있습니다. 이러한 모의 객체를 어떻게 사용할 수 있는지 예를 들면 다음과 같습니다:

모의를 이렇게 정의하면 실행 간 테스트 컨텍스트를 올바르게 격리할 수 있을 뿐 아니라, 적절한 컨텍스트 초기화의 토대도 마련됩니다. 모의 함수가 이미 정의되어 있으므로 각 컨텍스트를 만드는 것이 매우 쉽기 때문입니다:

통합 테스트

모든 엔드포인트, WS RPC 호출, 작업 또는 태스크는 반드시 통합적으로 테스트되어야 하며, 테스트를 작성하는 방법에 대해 여기에서 정의된 섹션을 따라 작성되어야 합니다. 통합 테스트는 다음 아래에 배치되어야 합니다: test/integration 디렉터리에 위치해야 하며, 테스트하려는 진입점에 따라 이름이 지정되어야 합니다.

통합 테스트는 단위 테스트로는 테스트할 수 없는 특정 통합 조건(SQL 쿼리, Redis 작업 등)과 우리의 로직 컴포넌트와 프로토콜(HTTP, WS) 간의 통합을 테스트하는 데에만 제한되어야 합니다.

통합 테스트를 어떻게 만들어야 하는지 예를 보여주기 위해, 사용자의 친구를 가져오는 간단한 HTTP 요청을 테스트하겠습니다.

그리고 다음과 같은 friends 컴포넌트가 있습니다:

마지막 업데이트