본문 바로가기
시작/TIL(Today I Learned)

React Testing Tutorial (1) - Filtering, Grouping

by 백씨네 2024. 7. 23.

Filtering Tests

Jest의 Watch 모드에서 특정 테스트만 실행하고 싶을 때, t,p를 누르면 된다.

p를 누르면 테스트 파일명을 입력할 수 있는 프롬프트가 나타난다. 테스트 파일명에 대한 정규식을 입력하면 해당 정규식을 만족하는 테스트 파일만 실행된다.

또 다른 방법으로는 t를 누르면 테스트명을 입력할 수 있는 프롬프트가 나타난다. t는 테스트명에 대한 정규식을 입력할 수 있게 해 준다. 이 경우 해당 정규식을 만족하는 테스트만 실행된다.

 

jest watch 모드
test name
file name

 

코드를 이용한 방법 - test.only, test.skip

test.only를 사용하면 해당 테스트만 실행된다. test.skip을 사용하면 해당 테스트는 실행되지 않는다.

test.only("this will be the only test that runs", () => {
    expect(true).toBe(false)
})

위 코드에서는 test.only가 사용되었기 때문에 해당 테스트만 실행된다.

test.skip("this test will be skipped", () => {
    expect(true).toBe(false)
})

위 코드에서는 test.skip이 사용되었기 때문에 해당 테스트는 실행되지 않는다.

 

 

Grouping Tests

describe를 이용한 그룹화

테스트를 그룹화하여 관리할 수 있다. describe 함수를 사용하면 된다.

describe(name, fn) 함수는 두 개의 인자를 받는다. 첫 번째 인자는 그룹의 이름이고, 두 번째 인자는 그룹에 속하는 테스트들을 정의하는 함수이다.

describe("group", () => {
    test("test1", () => {
        expect(true).toBe(true)
    })
    test("test2", () => {
        expect(true).toBe(true)
    })
})

 

위 코드에서는 group이라는 그룹에 test1, test2라는 두 개의 테스트가 속해있다.

describe 함수 또한 filtering을 할 수 있다. describe.only를 사용하면 해당 그룹만 실행된다. describe.skip을 사용하면 해당 그룹은 실행되지 않는다.

describe.only("group", () => {
    test("test1", () => {})
    test("test2", () => {})
})

describe.skip("group", () => {
    test("test3", () => {})
    test("test4", () => {})
})

 

 

그리고 describe 함수는 중첩해서 사용할 수 있다.

describe("group1", () => {
    test("test1", () => {})
    test("test2", () => {})
    describe("group2", () => {
        test("test3", () => {})
        test("test4", () => {})
    })
})

 

 

Filename Conventions

Jest는 테스트 파일을 찾을 때 특정한 파일명 규칙을 따른다. Jest는 __tests__ 디렉토리에 있는 파일과 test.jsspec.js로 끝나는 파일을 찾아서 테스트 파일로 인식한다.

예를 들어 아래와 같은 파일 구조를 가진 프로젝트가 있다고 가정하자.

.
├──/__tests__
│└── my-test.js
└── my-test.spec.js

 

위 프로젝트에서 my-test.jsmy-test.spec.js 파일은 Jest에 의해 테스트 파일로 인식된다.

항상 테스트 중인 코드 옆에 테스트 파일을 두고 상대경로가 짧아지도록 하는 것이 좋다.

 

 

Aliases

it과 test

ittest는 동일한 함수이다. 둘 중 어떤 것을 사용해도 상관없다. ittest의 alias이다.

test("this is a test", () => {})
it("this is a test", () => {})

fit과 test.only

fittest.only는 동일한 함수이다. 둘 중 어떤 것을 사용해도 상관없다. fittest.only의 alias이다.

test.only("this is the only test that runs", () => {})
fit("this is the only test that runs", () => {})

xit과 test.skip

xittest.skip은 동일한 함수이다. 둘 중 어떤 것을 사용해도 상관없다. xittest.skip의 alias이다.

test.skip("this test will be skipped", () => {})
xit("this test will be skipped", () => {})

댓글