묻고 답해요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
의존성 역전으로 해결한 외부의존성?
의존성과 Testability(2) 5분 10초 내용입니다.사진과 같이 해결하면 결국 SystemClockHolder의 getMillis에는 Clock이라는 의존성이 숨겨진거 아닌가요? 그럼 이 getMillis 메소드를 테스트하기 힘들어진 게 아닌가요?
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
좋은 설계
소형 테스트를 추구하며 테스트를 더욱 쉽게 바꿔보니 헥사고날 아키텍처가 되었고 이것이 테스트 코드를 쉽게 바꾸다보면 좋은 설계가 된다. 라는 것의 예시라고 봐도 될까요?
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
Controller에 테스트
Controller에 테스트를 넣을 필요가 없다고 해주셨는데 실습에서는 넣은 이유가 있을까요?
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
jest-extended 에러 해결
혹시 jest-extended를 사용하려고 할 때 에러가 난다면testSetup.js를 만들지 말고//jest.config.js export default { testEnvironment: "node", transform: { "^.+\.tsx?$": ["ts-jest",{}], }, setupFilesAfterEnv: [ 'jest-extended/all' ], };저렇게만 추가해서 해보시면 됩니다.일단 저는 됐습니다
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
안녕하세요 jest toHaveBeenCalledTimes 관련 질문드립니다.
전체 코드는 다음과 같습니다.(오류내용) mock 관련 toHaveBeenCalledTimes 질문드릴려는데요. toHaveBeenCalledTimes가 처음에는 기대값이 1로 맞아서 에러가 안나는데요. 두번째 테스트부터 첫번쨰 테스트에서 호출된 obj.minus 함수가 호출이 읽혀서 그런지 toHaveBeenCalledTimes의 기대값이 2가 됩니다. 세번쨰 테스트도 위에서 호출된게 있어서 그런지 기댓값이 5가 되구요 네번째 테스트도 마찬가지입니다. 원래 toHaveBeenCalledTimes 함수가 다른 테스트케이스에서 사용된 함수도 읽히는지 궁금합니다.
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
JPA가 아닌 Mapper 아키텍처 기반 테스트 코드 작성
안녕하세요, 수업 강의는 JPA 기반으로 설명해 주고 계신데 만약 Mapper 아키텍처 기반도 해당 강의 repository 테스트 코드 작성한 것 기반으로 적용하면 되나요?
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
안녕하세요 제로초님
강의하신 내용에 대해 혹시 블로그에 정리해서 글을 작성해도 상관없을까요?
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
제로초님 강의 교안을 볼 수 있는 곳이 있을까요?
강의 듣다 교안도 함께 보고싶어서 문의 드려요~
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
jest.fn()으로 모킹 함수를 만들어 expect() 할 경우 undefined 출력됩니다
안녕하세요현재 vue3로 구현된 프로젝트 내로그인 성공 시 utils.js의 method3이 호출되는지 테스트를 하려고합니다method3을 모킹함수로 대체하였는데로그인 로직 내 method3을 콘솔로 찍어보면 undefined이 나와서 질문드립니다.왜 method3이 undefined 가 나오는지 알려주실 수 있으실까요? 아래는 테스트 하기 위한 과정입니다.1. 로그인 로직 중 utils.js의 method3을 호출하는 코드 존재util.jsexport 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
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
클래스는 어떻게 모킹하나요?
클래스를 모킹할 때도 jest.mock을 사용하나요? 아니면 다른 방법이 있나요?
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
호출 순서 테스트, mock 객체, jest-extended 강의 내용중 TypeError가 나는데요!ㅠㅠ
package.json{ "name": "jest-lecture", "version": "1.0.0", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "description": "", "devDependencies": { "@types/jest": "^29.5.14", "jest": "^29.7.0", "jest-extended": "^4.0.2", "ts-jest": "^29.2.5" } }global.d.tsimport "jest-extended";tsconfig.json{ "files": ["global.d.ts"] }jest.config.js/** @type {import('ts-jest').JestConfigWithTsJest} **/ module.exports = { testEnvironment: "node", transform: { "^.+.tsx?$": ["ts-jest", {}], }, setupFilesAfterEnv: ["./testSetup.js"], };testSetup.jsconst matchers = require("jest-extended"); expect.extend(matchers);위의 환경에서 설정하였으며src/order.test.ts에서import { first, second, third } from "./order"; test("first->second->third", () => { const spy1 = jest.fn(first); const spy2 = jest.fn(second); const spy3 = jest.fn(third); spy1(); spy2(); spy3(); console.log(spy1.mock.invocationCallOrder[0]); console.log(spy2.mock.invocationCallOrder[0]); console.log(spy3.mock.invocationCallOrder[0]); // expect(spy1.mock.invocationCallOrder[0]).toBeLessThan( // spy2.mock.invocationCallOrder[0] // ); // expect(spy3.mock.invocationCallOrder[0]).toBeGreaterThan( // spy2.mock.invocationCallOrder[0] // ); expect(spy1).toHaveBeenCalledBefore(spy2); expect(spy3).toHaveBeenCalledAfter(spy2); });위처럼 테스트를 실행하면 ● first->second->third TypeError: expect(...).toHaveBeenCalledBefore is not a function 19 | // spy2.mock.invocationCallOrder[0] 20 | // ); > 21 | expect(spy1).toHaveBeenCalledBefore(spy2); | ^ 22 | expect(spy3).toHaveBeenCalledAfter(spy2); 23 | }); 24 | at Object.<anonymous> (src/order.test.ts:21:16)위와 같은 타입오류가 나오고있는데요,무엇때문에 오류가 나는지 모르겠습니다ㅠㅠ
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
모듈 모킹 시 메소드 동작 문제
https://github.com/ayden94/jestTestsrc/module.spec.ts에서 jest.mock('./module')를 하면, 모듈이 이상하게 모킹되는 듯합니다. 메소드가 존재는 하지만, 호출할 경우 완전히 말이 안 되는 결과를 리턴해서 toBe가 항상 틀린 것으로 결과가 나옵니다. 모듈 모킹 시도 없이 모듈 그 자체를 가지고 테스트를 해보면 문제가 없는데, 꼭 모듈을 모킹하면 문제가 생깁니다. 고민해봤지만 원인을 모르겠습니다.확인 부탁드립니다.
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
영속성 객체 구분으로 인한 JPA와 Querydsl의 Projection 사용
지금은 간단한 예제라 엔티티에서 JpaRepository를 사용하여 데이터를 가공해서 가져온 후 도메인 객체로 매핑시켜 controller에 넘겨 controller에서 response 객체로 변환시켰습니다.만약 Projection을 사용하는 경우Projection에서 바로 controller 패키지 안의 response 패키지 객체로 접근하는 것은 어떻게 생각하시나요?
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
비동기 함수 테스트 중 특정 케이스 에러
비동기 함수 테스트 강의를 따라했을 때 제 컴파일러에서는 오류가 발생합니다. 다른 테스트 케이스들 말고 아래 두 케이스에서만요.test('okPromise 테스트', () => { const okSpy = jest.fn(okPromise); return okSpy.then((result) => { expect(result).toBe('ok'); }) }) test('noPromise 테스트', () => { const noSpy = jest.fn(noPromise); return noSpy.catch((result) => { expect(result).toBe('ok'); }) })각 테스트 별 에러 메세지는 다음과 같습니다.'Mock<Promise<string>, [], any>' 형식에 'then' 속성이 없습니다.ts(2339)'Mock<Promise<never>, [], any>' 형식에 'catch' 속성이 없습니다.ts(2339)코드를 동일하게 작성했음에도 불구하고, 어떤 문제로 위 에러가 발생하는 걸까요?
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
인프라계층 구현체와 테스트 구현체에 대한 질문
안녕하세요.UserRepository를 구현하는 구현체로는 UserJpaRepository를 사용하는 UserRepositoryImpl와 테스트용 구현체인 FakeUserRepository가 있는데요. TDD라는게 단순 객체지향적인 설계를 잘하는 방법론이라면 납득이 가는데, 실제 서비스 되어야 할 코드가 잘 동작하는지 검증하기 위함이라는 관점에서는 조금 궁금한점이 생겨 질문드립니다. FakeUserRepository는 UserRepository의 계약을 잘 이행하고 테스트도 성공하도록 잘 구현하였습니다.그런데 실제 서비스에 사용될 UserRepositoryImpl는 한번도 검증된 적 없는데 테스트를 통해 어떻게 소프트웨어가 변화함에 있어서 확신을 가질 수 있나요? UserRepositoryImpl 내부 구현이 변경되었을때 여전히 FakeUserRepository만 테스트를 실행할텐데 어떤식으로 개발 과정에서 확신을 얻을 수 있는지 궁금합니다. 추가적으로 TDD의 역할에는 어떤 구현 기술에 대해 잘 사용되었는지에 대한 검증은 포함되지 않나요? 예를 들어 스프링 데이터 JPA를 잘 사용하였는지..? 예를 들자면 저는 TDD를 해본적은 없지만 실제 실행되는 인프라 계층을 실행해볼 수 있는 샘플 테스트코드 개념으로 만들어서 사용하고 있는데요. 제가 개발하고 있는 기업용 솔루션이 버전이 높아짐에 따라 워낙 무거워져서 로컬 PC에서 WAS를 기동하는데에만 2분이 넘기 때문에 최소한의 인프라계층 혹은 인프라계층의 협력 클래스들정도는 테스트 코드로 직접 테스트해볼 수 있도록 테스트 코드를 작성해 두었습니다. 이렇게 해두면 어떤 이슈가 발생했을때도 곧바로 쉽게 테스트가 가능하니까요. 물론 DB 개발서버 장비에 연결하고 더미데이터를 가지고 실행하는 식으로요. 이번 강의에서 H2를 통한 인프라 테스트 강의까지가 딱 제가 하고 있는 테스트들이었는데요. 중간에 놓친것인지 테스트가 무거워진다는 설명만 하고 그뒤로는 리팩토링과 함께 인프라 레벨의 테스트는 언급을 안하셔서 제가 생각하는 구현 기술을 잘 사용하여 실제 서비스되는 인프라 모듈을 직접 테스트 하는 부분은 어떻게 해야할지 궁금합니다.
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
TS로 변경 시 "type": "module" 제거 이유가 궁금합니다.
확장자를 TS로 변경했을 때 코드에는 ESM의 import, export를 사용했는데 왜 package.json파일의 ESM 관련 옵션인 "type": "module"을 제거하는지 궁금합니다. GPT의 답변에 의하면TS 파일은 컴파일 과정에서 CommonJS나 ESM이나 알맞게 변환을 하기 때문에 해당 옵션이 필요 없고, Jest와의 호환성을 위해 "type": "module"을 제거해주는 것이고,JS파일은 기본적으로 CommonJS모듈 시스템을 사용하기 때문에 import문을 사용했으면 ESM방식으로 해석하도록 명시하기 위해서 "type": "module"을 추가한다.라고 설명을 해주는데 그럼 JS 파일의 경우 Jest와의 호환성을 고려하지 않는건지.. 이해가 잘 되지 않습니다. 혹시 설명을 해주실 수 있을까요?
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
jest.config.js 파일 내용 다른 분들 참고
환경 : mac os저의 경우에 npx ts-jest config:init 명령어를 통해 생성한 jest.config.js 파일의 내용이 다음과 같이 강의 영상과 달랐습니다./** @type {import('ts-jest').JestConfigWithTsJest} **/ module.exports = { testEnvironment: "node", transform: { "^.+.tsx?$": ["ts-jest",{}], }, };강의 영상 내용에 맞춰서 preset: 'ts-jest' 설정을 추가해주어 Jest가 TypeScript 파일을 컴파일하고 실행할 수 있도록 해주니 잘 동작합니다.
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
강의 교안
안녕하세요 제로초님. 강의 교안이 어디있는지 모르겠습니다.
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
실습 코드 커밋
커밋을 강의 중간에 계속 하던데 깃허브에는 커밋이 한개밖에 없네요 어떻게 알수있을까요
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
UserEntity 메서드
좋은 강의 감사합니다. UserEntity 클래스에 있는 from 메서드는 static, toModel 메서드는 그렇지 않습니다. 둘의 차이와 from 메서드를 static 으로 설정한 이유가 있을까요?
주간 인기글
순위 정보를
불러오고 있어요