inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

테스트 with Jest: 제로초에게 제대로 배우기

커버리지 100%를 향한 여정

jest.fn()으로 모킹 함수를 만들어 expect() 할 경우 undefined 출력됩니다

102

하루틴

작성한 질문수 1

0

안녕하세요

현재 vue3로 구현된 프로젝트 내

로그인 성공 시 utils.js의 method3이 호출되는지 테스트를 하려고합니다

method3을 모킹함수로 대체하였는데

로그인 로직 내 method3을 콘솔로 찍어보면 undefined이 나와서 질문드립니다.

왜 method3이 undefined 가 나오는지 알려주실 수 있으실까요?

 

아래는 테스트 하기 위한 과정입니다.

1. 로그인 로직 중 utils.js의 method3을 호출하는 코드 존재

util.js

export const method1 = () => {
 ...
}

export const method2 = () => {
 ...
}

export const method3 = () => {
 ...
}

2. method3을 모킹 함수로 대체하려고 함

3. utils.js 파일이 위치하는 곳에 mocks 폴더를 만들어 아래와 같이 코드 작성

export default {

  ...jest.requireActual('../util'),

  method3: jest.fn()

}

4. 로그인 테스트 파일을 아래와 같이 작성

login.spec.js(테스트할 파일)

jest.mock('../common/util.js')

import { setActivePinia, createPinia } from 'pinia'

import * as fns from '../../common/util'

import { login } from '../../api/loginApi'

import { loginUser } from '../../store/authStore'

describe('로그인', ()=>{

 // userStore 내 loginUser 함수를 호출하기 위한 셋팅 
  let userStore 
  beforeEach(()=>{
    setActivePinia(createPinia())
    userStore = useAuthStore()
  })

  test('로그인 성공 시 성공 메시지 출력', async () => {
  // 로그인 성공 시 로그인한 사용자 정보 반환
  const mockResponse = {
     status : 200,
     data: {
        data: { 
           userName: 'test1'
        }
     } 
  }

 // 로그인 요청 api를 모킹함수로 대체
 await login.mockResovedValue(mockResponse) 

 // loginUser는 로그인 성공 시 유저 정보를 상태관리 변수에 저장
 await userStore.loginUser({userId : 'test1', password : 'test1pw'}) 

 expect(fns.method3).toHaveBeenCalled()

  })

})

 5. expect 부분에서 아래와 같이 오류 메시지가 발생합니다

expect(received).toHaveBeenCalledWith(...expected)

Matcher error: received value must be a mock or spy function

Received has value: undefined

 

supertest jest 소프트웨어-테스트 unittest

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

하루틴님이 겪고 계신 문제는 Jest에서 jest.mock을 사용할 때, method3 함수가 제대로 모킹되지 않은 것 같습니다. 몇 가지 체크해야 할 사항을 알려드리겠습니다.

  1. 경로 확인: jest.mock('../common/util.js')에서 경로가 올바른지 확인하세요. 경로가 잘못되었다면 Jest가 해당 모듈을 찾을 수 없을 것입니다.

  2. 의존성 모킹: jest.mock을 사용할 때, 모듈을 올바르게 가져오고 있는지 확인하세요. common/util.js 내부에서 default export가 아닌 named export로 되어 있습니다. 따라서 jest.mock을 사용하면 모든 named export가 자동으로 모킹됩니다.

  3. 모킹 설정: method3을 모킹하는 부분이 Jest의 auto-mock과 충돌하여 의도대로 동작하지 않을 수 있습니다. 직접 함수의 모킹을 설정해보세요:

    jest.mock('../common/util', () => ({
     ...jest.requireActual('../common/util'),
     method3: jest.fn(),
    }));
    
  4. Mock 및 Spy 초기화: 각 테스트 전에 모킹을 초기화하거나 설정이 필요한 경우 beforeEach 내부에서 명확히 선언 및 초기화를 해주세요.

위 사항들을 점검해 보신 후에도 문제가 해결되지 않으면, method3이 호출되는 로그인 로직 또는 hook에서 어디서 정의되고 호출되는지를 추가로 검토해보시기 바랍니다. 도움이 되었기를 바랍니다! 😊

관련 문서를 참고하실 수 있도록 아래의 링크를 추가해 드립니다:
- Reference Documentation on Testing With a Mock Environment

Happy coding!

UserService, CertificationService 책임 분리 기준 질문

0

26

1

레이어드 아키텍처에서 도메인 중심 패키지 구조를 적용하거나 변화하는 시점이 있을까요?

1

40

2

POJO에서 Spring Test로 넘어갈 때 누락(해결됨)

0

33

1

섹션 4) 8. 실무 QA의 관찰 포인트 이해 강의 질문

0

39

1

tryMove(..) 메서드 ArrayIndexOutOfBoundsException 제보

1

60

2

AvailableUsers

0

41

1

선생님, 테스트 코드 제보 강의는 언제쯤 올라오나요?

0

76

2

mockfunction에 대해서

0

52

1

mockfunction에 대해서

0

54

2

강의 교안

0

116

2

jest-extended 에러 해결

0

155

1

npx cross-env NODE_OPTIONS="$NODE_OPTIONS --experimental-vm-modules" jest 터미널 에러

1

195

1

안녕하세요 jest toHaveBeenCalledTimes 관련 질문드립니다.

0

166

2

안녕하세요 제로초님

0

166

1

제로초님 강의 교안을 볼 수 있는 곳이 있을까요?

0

232

3

jest-extended 설정 중 TypeError

0

167

1

클래스는 어떻게 모킹하나요?

0

158

1

호출 순서 테스트, mock 객체, jest-extended 강의 내용중 TypeError가 나는데요!ㅠㅠ

0

136

1

모듈 모킹 시 메소드 동작 문제

0

159

1

vsCode 내에서 Jest 설정 할 때 setting.json 내 설정 시 궁금한 점이 있습니다.

0

441

1

비동기 함수 테스트 중 특정 케이스 에러

0

192

1

TS로 변경 시 "type": "module" 제거 이유가 궁금합니다.

0

299

2

jest.config.js 파일 내용 다른 분들 참고

0

326

2

강의 교안

0

257

2