inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

TypeError: user_model_1.default.create is not a function

미해결

따라하며 배우는 TDD 개발 [2023.11 업데이트]

학습중 repository pattern을 적용하여 테스트를 적용해 보던 중 TypeError: user_model_1.default.create is not a function 라는 에러와 마주하게 되었습니다. user.repository.ts import 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.ts import { 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() 부분에서 에러가 나는것으로 확인되었습니다.

  • node.js
  • mongodb
  • express
  • supertest
  • tdd
  • jest
  • mongoose
  • 소프트웨어-테스트
양진영 댓글 1 좋아요 0 조회수 287

강의 코드 질문이 있습니다!

해결됨

2시간으로 끝내는 프론트엔드 테스트 기본기

안녕하세요 nock을 활용한 HTTP request mocking 강의를 듣던 도중 계속 테스트 실패가 일어나 확인하니 axios 400 에러가 나고 있는데 isError 가 true 로 오지 않아 테스트가 실패하고 있는 것 같습니다. LoginPage의 isError 를 !isError 로 변경하니 테스트가 통과 되었습니다. 원래 isError 가 false로 오는게 맞는 건가요??

  • react
  • jest
  • 소프트웨어-테스트
  • Cypress
  • storybook
  • chatgpt
swoo1429 댓글 1 좋아요 0 조회수 473

테스트 코드의 흐름에 관해 질문이 있습니다!

해결됨

2시간으로 끝내는 프론트엔드 테스트 기본기

안녕하세요 섹션 2의 nock을 활용한 HTTP request mocking 강의 1:31초 부분에 질문이 있습니다. fireEvent.change(emailInput,{target:{value:" wrong@email.com }}); fireEvent.change(passwordInput,{target:{value:" wrongPassword }}); 를 적으시는 부분에서 잘못된 패스워드와 잘못된 이메일을 입력할 때 라고 말씀하셨는데 value 부분은 string이어서 " wrong@email.com " 이 틀린 이메일을 말한다는걸 코드가 이해하는 부분도 아닐 것 같은데 어떻게 에러 코드를 던져주는건지 궁금합니다! ( 로그인에 실패한다. 라는 상황이 코드상에 보이지 않는 것 같은데 코드가 어떻게 이해하는지를 모르겠습니다! )

  • react
  • jest
  • 소프트웨어-테스트
  • Cypress
  • storybook
  • chatgpt
swoo1429 댓글 1 좋아요 0 조회수 337

인텔리제이로 Commit 시 pre-commit 이 안됨

해결됨

쥬쥬와 함께 하루만에 끝내는 스프링 테스트

안녕하세요. 수강중에 해당 부분에서 막혀서 계속 찾아보다가 질문 남깁니다,, 다름이 아니라 터미널에서 직접 git add . git commit -m "~~" 하면은 해당 pre-commit 이 정상적으로 동작하는데 인텔리제이에서 실행하면 안되는 상황입니다.. 아 강의에 있는거처럼 인텔리제이에서 run git hooks 는 체크 해놨습니다. 혹시 이외에 다른걸 확인할 방법이 있을까요 인텔리제이 버전은 IntelliJ IDEA 2023.2.1 (Ultimate Edition) 입니다.

  • spring
  • docker
  • junit
  • mockito
  • 소프트웨어-테스트
qoeotl 댓글 2 좋아요 1 조회수 1102

jest 테스트코드 작성을 위한 사전세팅 중 문제가 발생했습니다.

미해결

2시간으로 끝내는 프론트엔드 테스트 기본기

안녕하세요 jest 테스트코드 작성을 위한 사전세팅중 위와 같이 코드를 작성 후 실행하였더니 이러한 에러가 발생하였습니다. jest를 사용하며 import라는 구문을 사용하지 못한다는 에러같은데 해결 방법이 있을까요??

  • react
  • jest
  • 소프트웨어-테스트
  • Cypress
  • storybook
  • chatgpt
swoo1429 댓글 3 좋아요 0 조회수 848

@RequestParam vs @ModelAttribute

해결됨

Practical Testing: 실용적인 테스트 가이드

강의에 나온 내용은 아니지만 개인적으로 개발을하다 궁금한 점이 생겨서 질문 드립니다. 조회 API를 만들 때 (GET요청)Controller단에서 파라미터를 받는 방식이 @RequestParam, @ModelAttribute 크게 2가지 있는데 2가지 방식중 어떤 방식을 선호하지는지 질문드립니다. @RequestParm을 사용했을 때는 Controller단에서 바로 직관적으로 어떤 파라미터를 받는지 확인이 가능하다는 장점이 있지만 Service단으로 파라미터를 넘겨줄 때, 하나하나 넘겨줘야해서 파라미터가 추가되었을 때 불편하다는 점이 있을 테고 @ModelAttribute를 사용했을 때는 수정에는 유리하겠지만 가독성은 떨어질 것 같다는 생각이 듭니다. 강사님은 어떤 생각을 가지고 계신지, 현업에서는 주로 어떤방식으로 개발을 하는지 의견주시면 감사하겠습니다.

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
psam1017 댓글 2 좋아요 0 조회수 533

테스트 실행이 안되는 문제..

미해결

2시간으로 끝내는 프론트엔드 테스트 기본기

공유해주신 프로젝트 clone해서 수정 없이 npm run unit-test 명령어 실행 시, 아래 이미지와 같이 export().toBeInTheDocument() 를 찾지 못해 진도를 나가지 못하고 있습니다.. 혹시 해결방안을 알려주실 수 있으실까요? 구글링 검색 시, import "@testing-library/jest-dom"; 을 테스트 파일 가장 상위에 두라고 하는데 이미 되어 있고 다른 해결책들도 실행해보았지만 해결하지 못했습니다. 노드 버전은 20.10.0 , 18.19.0 , 18.14.0 에서 실행했을 때, 모두 실패했습니다..

  • react
  • jest
  • 소프트웨어-테스트
  • Cypress
  • storybook
  • chatgpt
mktae 댓글 1 좋아요 0 조회수 653

3.4. 타이머 테스트의 마지막 테스트 질문입니다.

해결됨

실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트

it('연이어 호출해도 마지막 호출 기준으로 지정된 타이머 시간이 지난 경우에만 함수가 호출된다.', () => { const spy = vi.fn(); const debouncedFn = debounce(spy, 300); // 최초 호출 debouncedFn(); // 최초 호출 후 0.2초 후 호출 vi.advanceTimersByTime(200); debouncedFn(); // 두번째 호출 후 0.1초 후 호출 vi.advanceTimersByTime(100); debouncedFn(); // 세번째 호출 후 0.2초 후 호출 vi.advanceTimersByTime(200); debouncedFn(); // 👈 4번째 호출 // 네번째 호출 후 0.3초 후 호출 // 최초 호출 후에 함수 호출 간격이 0.3초 이상 -> 다섯번째 호출이 유일 vi.advanceTimersByTime(300); debouncedFn(); // 👈 5번째 호출 // 다섯번을 호출했지만 실제 spy함수는 단 한 번만 호출 expect(spy).toHaveBeenCalledTimes(1); }); 안녕하세요. 새해 복 많이 받으세요 :) 다름이 아니라 위 코드에서 4번째 호출 후 바로 뒤, vi.advanceTimersByTime(300); 로 인해 0.3초가 흘렀고 이로 인해 expect(spy).toHaveBeenCalledTimes(1); 이 맞다고 나온 것이 아닌지 궁금해서 질문드립니다. 강의에서는 4번째 호출이 아닌 5번째 호출로 인해 호출된다고 하셨는데(최초 호출 후에 함수 호출 간격이 0.3초 이상인 경우는 다섯번째 호출이 유일하다고 하신 것 같아요) 5번째 호출 후에는 0.3초가 흘렀다는 가정 ( vi.advanceTimersByTime(300); )이 없고 제가 혼자 테스트 해보며 5번째 호출 후에 vi.advanceTimersByTime(300); 를 넣어 0.3초가 흘렀다고 가정을 하니 호출이 2번 되었다고 떠서요. 제가 debounce를 헷갈려 했는데 제가 아직 잘 이해하지 못한 부분이 있는 건지 아니면 실제로 잘못 설명된 부분이 있는 건지 모르겠어서 질문 드립니다. 감사합니다.

  • javascript
  • react
  • 소프트웨어-테스트
  • vitest
Kate 댓글 1 좋아요 1 조회수 392

MySQL property

미해결

쥬쥬와 함께 하루만에 끝내는 스프링 테스트

db 비밀번호 에러로 실행이 안되는데, 혹시 제 로컬에 설치된 mysql 비밀번호를 입력해야하는 건가요?

  • spring
  • docker
  • junit
  • mockito
  • 소프트웨어-테스트
hodumaru 댓글 1 좋아요 0 조회수 317

변하는 값을 추상화 시켜라

미해결

Java/Spring 주니어 개발자를 위한 오답노트

안녕하세요 강의 잘 보고 있습니다. 다름이 아니라 5분 48초에 나오는 부분에서 DIP 원칙으로 설계 하셨는데.. 그럼 결국에 프로덕션에서는 getMils() 메서드를 사용하면 똑같이 내부적으로 의존성이 감춰지기 때문에 초반에 설명하신거하고 똑같은 상황이 되는게 아닌가요?? 감사합니다!

  • java
  • spring
  • 객체지향
  • 소프트웨어-테스트
wnsqud70 댓글 1 좋아요 0 조회수 323

mocking과 spy함수가 헷갈립니다.

해결됨

실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트

mocking과 spy함수가 조금 헷갈립니다. 아래와 같이 정리하면 될까요? - spy 함수 : 빈 함수인데, vitest에서 이 함수를 감지하고 있고 함수가 call 되었는지, 인자는 무엇이었는지 검증하는 가짜 함수. - mocking : 종속성이 있는 라이브러리를 복사해두고, 그 중 사용해야 할 함수나 기능을 spy 함수로 대체하여 call 했는지 검사할 수 있는 프로세스. 그러면 mocking 자체는 spy 함수 없이 사용하는 것은 의미가 없다고 보면 될까요?

  • javascript
  • react
  • 소프트웨어-테스트
  • vitest
회수 댓글 2 좋아요 1 조회수 917

오류메세지는 확인했는데 어떻게 고쳐야 할지 모르겠습니다 ㅠ

미해결

따라하며 배우는 리액트 A-Z[19버전 반영]

TODO앱을 클래스앱에서 컴포넌트 함수형 으로 바꾸는과정에서 뭔가 문제가 생겼는지 아니면 이전부터 문제가 있었는지는 모르겠는데 이런오류가 뜨면서 되지않네요 ㅠㅠ 리액트 초짜라 뭘 어떻게 바꿔야할지 모르겠습니다 ㅠㅠ 답변부탁드립니다 감사합니다 ㅠㅠ 위에 문제가 된다고 하는 6행 74행 사진입니다 ㅠㅠ

  • react
  • redux
  • tdd
  • typescript
  • 소프트웨어-테스트
나래 댓글 1 좋아요 0 조회수 319

테스트 코드 파일 위치

해결됨

실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트

안녕하세요! 강의 잘 보고 있습니다. :) 다름이 아니라 테스트 코드 파일들의 작성 위치가 궁금한데요, 보니까 그냥 파일 바로 아래에 새로운 테스트 코드 파일이 있는 것 같은데 이게 보편적인 위치일까요? 따로 테스트 코드 폴더를 만들거나 하진 않는 건지 궁금해서 문의드립니다. 감사합니다 :)

  • javascript
  • react
  • 소프트웨어-테스트
  • vitest
Kate 댓글 1 좋아요 1 조회수 778

async-await 이 꼭 있어야하는지 질문입니다

해결됨

실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트

안녕하세요. 강의 너무 재밌게 잘 보고 있습니다. 두가지 질문이 있어서 문의글 남깁니다. 질문 1. 테스트코드에서 async, await 가 필요없어 보이는 곳에도 꼭 붙이는 이유가 있나요? 예를들면, 아래 1번 코드에서 async await 이 반드시 필요한 이유가 있는건가요? 저는 2번처럼 async-await을 제거해도 테스트가 정상 통과 되어서요. 특별한 목적이 있어서 붙여야 하는건지 궁금합니다. ! 1) it('총 상품 금액은 "$500.00"로 노출된다', async () => { await render(<TestPayment />); expect(screen.getByText('500.00')).toBeInTheDocument(); }); 2) it('총 상품 금액은 "$500.00"로 노출된다', () => { render(<TestPayment />); expect(screen.getByText('500.00')).toBeInTheDocument(); }); 질문 2. render 함수를 util 로 만들어서 사용하시는데, userEvent.setup의 user 도 함께 들어있는 이유가 궁금합니다. userEvent를 쓰지 않는 테스트코드도 있는데, 꼭 함께 들어있어야하나 하는 생각이 들어서요 ㅎㅎ userEvent를 더 편리하게 사용하기 위함인가요? export default async (component, options = {}) => { const { routerProps } = options; const user = userEvent.setup(); return { user, ...render( <QueryClientProvider client={queryClient}> <MemoryRouter {...routerProps}>{component}</MemoryRouter> <Toaster /> </QueryClientProvider>, ), }; }; 감사합니다!

  • javascript
  • react
  • 소프트웨어-테스트
  • vitest
김하진 댓글 1 좋아요 2 조회수 348

사용되는 아키텍처에 대해

미해결

Practical Testing: 실용적인 테스트 가이드

학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요! 먼저 유사한 질문이 있었는지 검색해 보세요. 서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 선생님 강의 잘보고 있습니다. 질문드리고 싶은 부분은 강의에서 사용되는 아키텍처에 대한 것입니다. 레이어드 아키텍처라는것은 이해했지만, 패키지 구조가 생소해서 어떻게 구성되는지는 이해하기 어려운것 같습니다. 제가 아는 방식은 컨트롤러, 서비스, 리파짓토리, 도메인 패키지로 단순하게 작성하는 방법인데, 여기서 사용된 패키지 구성방식과 관련된 키워드나 레퍼런스를 얻을 수 있을가요?

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
gukin.dev 댓글 2 좋아요 0 조회수 582

에러 처리를 위한 단위테스트 작성

미해결

따라하며 배우는 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); })

  • node.js
  • mongodb
  • express
  • supertest
  • tdd
  • jest
  • mongoose
  • 소프트웨어-테스트
ce ce 댓글 1 좋아요 0 조회수 383

카프카 실행에 문제가 있는 분들

해결됨

쥬쥬와 함께 하루만에 끝내는 스프링 테스트

노션에 작성된 의존성에 는 org.testcontainers:kafka 라고 적혀있는데, org.testcontainers:kafka:1.19.0 와 같이 버전 명시해주시면 해결됩니다.

  • spring
  • docker
  • junit
  • mockito
  • 소프트웨어-테스트
heekwang.dev 댓글 1 좋아요 2 조회수 351

github action 통합 테스트 build 오류 건

미해결

쥬쥬와 함께 하루만에 끝내는 스프링 테스트

안녕하세요 🙂 github action build 시 오류가 발생하여 해결 방안을 찾고자 질문 내용을 작성했습니다. -- IntegrationTest.class package com.dnd.gooding.integration; import java.io.File; import java.time.Duration; import java.util.HashMap; import java.util.Map; import org.junit.Ignore; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.transaction.annotation.Transactional; import org.testcontainers.containers.DockerComposeContainer; import org.testcontainers.containers.wait.strategy.Wait; @Ignore @Transactional @SpringBootTest @ContextConfiguration(initializers = IntegrationTest.IntegrationTestInitializer.class) public class IntegrationTest { static DockerComposeContainer rdbms; static { rdbms = new DockerComposeContainer(new File("infra/test/docker-compose.yml")) .withExposedService( "local-db", 3306, Wait.forLogMessage(".*ready for connections.*", 1) .withStartupTimeout(Duration.ofSeconds(180L))) .withExposedService( "local-db-migrate", 0, Wait.forLogMessage("(.*Successfully applied.*)|(.*Successfully validated.*)", 1) .withStartupTimeout(Duration.ofSeconds(180L))); rdbms.start(); } static class IntegrationTestInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { Map<String, String> properties = new HashMap<>(); String rdbmsHost = rdbms.getServiceHost("local-db", 3306); Integer rdbmsPort = rdbms.getServicePort("local-db", 3306); properties.put( "spring.datasource.url", "jdbc:mysql://" + rdbmsHost + ":" + rdbmsPort + "/gooding"); TestPropertyValues.of(properties).applyTo(applicationContext); } } } -- GoodingApplicationTest.class class GoodingApplicationTest extends IntegrationTest { @Test void contextLoads() { } } -- Github Action 스크립트 name: Pull Request Test on: pull_request: types: [opened, synchronize, reopened] permissions: read-all jobs: build-test: runs-on: ubuntu-latest permissions: contents: read pull-requests: write steps: - name: Git Checkout uses: actions/checkout@v3.0.2 - uses: dorny/paths-filter@v2 id: changes with: filters: | application: - 'build.gradle' - 'src/**' - name: JDK 설치 if: steps.changes.outputs.application == 'true' uses: actions/setup-java@v3 with: distribution: zulu java-version: 17 cache: 'gradle' - name: Gradle Build if: steps.changes.outputs.application == 'true' run: | chmod +x ./gradlew ./gradlew build --parallel -- Github Action 오류 발생 혹시 해당 오류의 원인을 알 수 있을까요..?? ㅠ 감사합니다 ㅠ

  • spring
  • docker
  • junit
  • mockito
  • 소프트웨어-테스트
HH 댓글 1 좋아요 0 조회수 632

안녕하세요 재고 테이블에 대해서 질문 있습니다.!

해결됨

Practical Testing: 실용적인 테스트 가이드

안녕하세요 멘토님 강의 잘듣고 있습니다! 제가 테이블을 언제 만들어야 하고 합쳐야 되는지에 대해서 잘 모르겠습니다. 혹시 검색 키워드와 상품테이블에서 재고를 관리하지 않고 따로 테이블을 만든 이유가 있을까요 ?

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
qheogus55 댓글 2 좋아요 2 조회수 745

인기 태그

인프런 TOP Writers

주간 인기글