묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결테스트 with Jest: 제로초에게 제대로 배우기
강의 교안
강의 안에 교안 얘기가 있는데 강의 교안이 어디있나요?
-
미해결테스트 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 함수가 다른 테스트케이스에서 사용된 함수도 읽히는지 궁금합니다.
-
미해결테스트 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가 항상 틀린 것으로 결과가 나옵니다. 모듈 모킹 시도 없이 모듈 그 자체를 가지고 테스트를 해보면 문제가 없는데, 꼭 모듈을 모킹하면 문제가 생깁니다. 고민해봤지만 원인을 모르겠습니다.확인 부탁드립니다.
-
미해결테스트 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)코드를 동일하게 작성했음에도 불구하고, 어떤 문제로 위 에러가 발생하는 걸까요?
-
미해결테스트 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: 제로초에게 제대로 배우기
강의 교안
안녕하세요 제로초님. 강의 교안이 어디있는지 모르겠습니다.
-
미해결따라하며 배우는 TDD 개발 [2023.11 업데이트]
TypeError: user_model_1.default.create is not a function
학습중 repository pattern을 적용하여 테스트를 적용해 보던 중 TypeError: user_model_1.default.create is not a function 라는 에러와 마주하게 되었습니다.user.repository.tsimport User from "../model/user.model"; export class UserRepository { createUser = async(user) => { const newUser = await User.create({ ...user }) return newUser } findUserById = async(id:string) => { const user = await User.findById('65cba34813b2fbec74a558a8') if(!user) throw new Error('존재하지 않는 유저정보 입니다.') return user } }user.repository.test.tsimport { UserRepository } from "../../app/repository/user.repository" const createMock = jest.fn() const findByIdMock = jest.fn() jest.mock("../../app/model/user.model", () => { return { User: jest.fn(() => { return { create:createMock, findById:findByIdMock } }) } }) describe('user repository Create', () => { let sut:UserRepository; const newUser = { id:"abcdefrwgsf123123", name:"test name", email:"test@nanana.com" } beforeEach(() => { sut = new UserRepository() }) afterEach(() => { jest.clearAllMocks() }) it('create api', async () => { createMock.mockReturnValueOnce(newUser) const actual = await sut.createUser({name:newUser.name, email:newUser.email}) expect(createMock).toHaveBeenCalledTimes(1) expect(actual).toStrictEqual(newUser) expect(createMock).toHaveBeenCalledWith({name:newUser.name, email:newUser.email}) }) }) jest실행시 create api의 createMock.mockReturnValue() 까지는 실행이되지만 await sut.createUser() 부분에서 에러가 나는것으로 확인되었습니다.
-
미해결따라하며 배우는 TDD 개발 [2023.11 업데이트]
에러 처리를 위한 단위테스트 작성
에러 처리를 위한 단위테스트 작성 강의 내용 중 이해가 가지 않는 부분이 생겨 글 남김니다.errorMessage 의 message 내용은 description property missing 에러입니다. 그렇다면 테스트 상황에서 포스트맨과 동일하게 description이 빠진 객체를 저장하다 에러가 발생해야 맞는 테스트가 아닌가 하는 의문이 생기네요.it('should handle errors', async () => {const errorMessage = {message: "description property missing"}; const rejectedPromise = Promise.reject(errorMessage); productModel.create.mockReturnValue(rejectedPromise); await controller.createProduct(req, res, next); expect(next).toBeCalledWith(errorMessage);})
-
미해결따라하며 배우는 TDD 개발 [2023.11 업데이트]
res.status(201) 부분에서 typeerror가 발생합니다
에러메시지: TypeError: Cannot read properties of undefined (reading 'status')res.status(200); 해당 코드에서 발생하는 에러인데 강사님이 코드돌리실때는 해당 에러가 발생하지 않는데 제 pc에서는 왜 에러가 발생하는지 잘 모르겠습니다...코드는 강의에서 입력하신 그대로 따라서 했습니다
-
미해결따라하며 배우는 TDD 개발 [2023.11 업데이트]
따라하며 배우는 TDD 개발 [2023.11 업데이트] 강의 질문
따라하며 배우는 TDD 개발 [2023.11 업데이트]2023.11 업데이트라고 되어 있는데, 이게 업데이트 반영 된건가요?
-
미해결따라하며 배우는 TDD 개발 [2023.11 업데이트]
테스트를 위한 데이터베이스를 생성해야하나요?
운영 단계에서의 데이터베이스와개발 단계에서의 데이터베이스를 분리하여 운영한다고 하면,테스트를 위한 데이터베이스도 만들어야할까요?
-
미해결따라하며 배우는 TDD 개발 [2023.11 업데이트]
Postman 사용방법에 대해서
안녕하세요 Postman을 윈도우에서 깔아서 쓰려고 하는데 자꾸만 셋업로그가 잘못되었다고 에러가 뜹니다. 다시 시도해 봐야 하나요? 아니면 postman을 launch부터 하고 나서 깔아야 하나요? 참고로 postman을 launch하고 나서 또 다시 다운로드 시도해봤습니다.
-
미해결따라하며 배우는 TDD 개발 [2023.11 업데이트]
jest.fn() 을 할당할때 타입스크립트에서 에러가 발생합니다.
Typescript를 쓰면서 공부중입니다. productModel.create = jest.fn();위 코드를 할당할 때Cannot assign to 'findByUsername' because it is a read-only property.라는 컴파일 에러가 발생합니다...타입스크립트에서는 어떻게 할당하면 될까요 ?