整理TIL|Jest用語

22942 ワード


整理しようとするコード鞍馬-済斯特課程講義内容.

概要


規模の大きいプロジェクトでは、1つずつテストする時間はありません.そのため、自動化されたテストツールを使用してテストを行います.デフォルトでは、ファイル名にtest、またはテスト/457914とフォルダがありますが、特定のファイルのみをテストしたい場合は、最後にファイル名が追加されます.
## 특정 파일 확인
yarn test 파일이름

きほんけいじょう


出典:紹介、インストールと簡単なテストコードANSA-Jest課程1
出典:Anma-Jestレッスン2をエンコードするのに役立つMatchers
test('코드 설명', () => {
  expect(검증할 값).toBe(기대되는 값)
})

Matcher

  • __tests__:原型検査時使用
  • toBetoEqual:参照タイプチェック時に使用
  • null、undefined、boolean判別

  • toStrictEqual
  • toBeNull
  • toBeUndefined
  • toBeDefined
  • toBeTruthy
  • test('null은 null이야', () => {
    	expect(null).toBeNull()
    })

    大きいです。小さいです。大きいか等しいか。以下

  • toBeFalsy:大
  • toBeGreaterThan:大きいか等しい
  • toBeGreaterThanOrEqual:小
  • toBeLessThan:以下
  • 数値テストの注意事項


    JS中toBeLessThanOrEqualJSはメモリに64ビットの浮動小数点形式で数字を格納します.メモリにはバイナリが格納されているので、10進数をバイナリに変換します.この過程で、無限小数に変換され、64ビットを超える部分を切除します.よって、結果値は0.1 + 0.2 !== 0.3Jestでは,この問題を解決するために近似値比較の0.30000000000000004関数を用いることができる.
    test('0.1 더하기 0.2는 0.3이야.', () => {
    	expect(fn.add(0.1, 0.2)).toBeCloseTo(0.3) // pass
    })

    正規表現の使用

  • toBeCloseTo
  • test('Hello World에는 w가 있어.', () => {
    	expect('Hello World').toMatch(/w/i) // pass
    })

    配列内の要素の検索

  • toMatch(정규표현식)
  • test('userList에 test가 있어?', () => {
    	const userList = ['Tom', 'Jane', 'Kai']
    	expect(userList).toContain('test') // failed
    })

    エラーチェック

  • toContain():エラーが発生した場合、pass
  • toThrow():特定エラー確認
  • test('에러 발생 확인', () => {
    	expect(() => fn.getThrowError()).toThrow('error')
    })

    非同期検出


    出典:テストコードANSA-Jestチュートリアル#3非同期コード

    コールバックモード


    エンジンがコードの下部に達すると、実行は直接終了し、非同期コードは実行されません.
    このためtest(「説明」callback)では、callback関数パラメータで特定キーワードを入れ(toThrow(에러 이름))、エンジンが特定キーワードに到達したときに終了するように設定します.
    const fn3 = {
      getName: (callback) => { // callback을 인자로 받고 3초 후 콜백함수를 실행함
        const name = 'Kim'
        setTimeout(() => {
          callback(name)
        }, 3000)
      }
    }
    
    // fn.test.js
    test('3초 후 Kim이라는 이름을 출력', (done) => {
      function callback(name) {
      	expect(name).toBe('Kim')
        done() // 비동기 함수가 실행되고 done까지 만났을 때 비로소 종료
      }
      fn.getName(callback)
    })

    保証する


    Jestは、プロセスの解析または拒否を待つため、特定のキーワードの作成を終了する必要はありません.代わりに、プロミスに戻る関数の前にe.g, done
    const fn3 = {
      getPuppy: () => {
        const puppy = 'pup'
        return new Promise((res, rej) => {
          setTimeout(() => {
            res(puppy) // 프로미스 return
          }, 2000)
        })
      }
    }
    
    fn.test.js
    test('2초 후 puppy "pup"을 출력', () => {
      return fn3.getPuppy().then((puppy) => {
        expect(puppy).toBe('pup')
      })
    })
    promisモードを使用することができますが、コールバックモードがあります.この場合、returnまたはresolves切寧により機能する.
    test('2초 후 puppy "pup"을 출력', () => {
      return expect(fn3.getPuppy()).resolves.toBe('pup')
    })

    asnyc, await


    async,awaitもpromisを使用するので,上部getPuppyメソッドを使用する.
    test('2초 후 puppy "pup"을 출력 with asnyc, await', async () => {
      const puppy = await fn3.getPuppy()
      expect(puppy).toBe('pup')
    })

    テスト前処理関連関数


    出典:コード鞍馬-Jest課程#4テスト前後タスク
  • rejects:試験関数毎に実行する前に実行する関数
  • beforeEach:試験関数毎に実行される関数
  • afterEach:すべての関数が実行されるまで1回しか実行されない関数
  • beforeAll:全関数実行後1回のみ実行する関数
  • 」describe以外のbeforeEachは常に中のbeforeEachより先に実行されます.
    describe("User 관련 작업", () => { // 관련작업을 한 데 묶을 수 있다.
      let user = {}
    
      beforeAll(async () => {
        // 작업 전 user Db 가져오기
        user = await fn3.connectUserDb()
      })
    
      afterAll(async () => {
        return fn3.disonnectUserDb()
      })
    
      test('이름은 Kim', () => {
        expect(user.name).toBe('Kim')
      })
    })
  • only, skip
  • afterAll:特定テストのみ検証
  • test.only(설명, () => {}):特定テストのみスキップ
  • Mock関数


    出典:エンコードANSA-Jestレッスン#5木関数(Mock Functions)

    jest.fn().mock

    const mockFunc = jest.fn() // mock 함수 만들기
    mockFunc.mock.calls // 함수의 호출 횟수, 호출된 인자값 확인 가능, [[인자], [인자, 인자], [인자]]
    mockFunc.mock.results // 리턴된 값 확인, [{ type: 'return', value: 어쩌구 }]
  • test.skip(설명, () => {}):mock関数の戻り値を設定
  • mockReturnValueOnce:mock関数の最後の要素の戻り値を設定
  • mockFunc.
      .mockReturnValueOnce(바꿀 값)
      .mockReturnValueOnce(바꿀 값)
      .mockReturnValue(바꿀 값)
  • mockReturnValue:非同期関数の模倣
  • jest.mock(関数ソース)


    呼び出しのたびにdbなどに実際に影響する関数があると仮定する.テストを行うために、関数を直接呼び出してdbに接続し、返すのは面倒です.その際に使用するmockResolvedValuejest.mock()読み込んだ関数をmockingモジュールとし、実際に関数を呼び出すことはありません.
    const func = require('./fn')
    
    jest.mock('./fn') // mock module로 만듦
    func.createUser.mockReturnValue({ name: 'Kim' }) // 함수의 리턴값을 변경
    
    test('user 생성', () => {
      const user = fn.createUser('Kim')
      expect(user.name).toBe('Kim')
    })
    

    mock関数の呼び出しリカバリ、パラメータチェック

  • jest.mock():一度以上呼んだことがあるかチェック
  • toBeCalled():正しいコール回数をチェック
  • toBeCalledTimes(횟수):検査買付
  • toBeCalledWith(인수...):最後に実行した関数の因数のみチェック
  • その他のexpect関連関数はJestスロットで確認できます.