Skip to main content

Command Palette

Search for a command to run...

Unit Test Using Jest

Published

Recently, I make a package about poker ruler logic from the project in the series articles which is writing. I need to check the correction of each poker rule when I change the code involved. So I add Jest to have a auto unit test.

  1. Install packages, for js, only jest is nessary below.

npm i -D jest ts-jest @types/jest

  1. Jest config in package.json
//package.json

"jest": {
    "moduleFileExtensions": [
      "ts","js"
    ],
    "transform": {
      "\\.(ts|tsx)$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
    },
    "testRegex": "/__tests__/.*\\.(ts)$"
  }

3.Make a directory named "test", and make a file suffix with "_spec".

src
···
├── __tests__
│   └── ruler_spec.ts
···

4.Write test code in ruler_spec.ts

import { E_TYPE } from "../Config";
import {Ruler} from "../Ruler";

var ruler = new Ruler();

describe('type-check', () => {
    it('DOUBLE_JOKER', () => {
        expect(ruler.checkCardType([0x4e, 0x4f])).toBe(E_TYPE.DOUBLE_JOKER);
    })
    it('QUADRUPLE', () => {
        expect(ruler.checkCardType([0x02, 0x02, 0x02, 0x02])).toBe(E_TYPE.QUADRUPLE);
    })
    it('SINGLE', () => {
        expect(ruler.checkCardType([0x02])).toBe(E_TYPE.SINGLE);
    })
    it('QUADRUPLE_TAKE_TWO_DOUBLE', () => {
        expect(
            ruler.checkCardType([0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05])
        ).toBe(E_TYPE.QUADRUPLE_TAKE_TWO_DOUBLE);
    });
    it('QUADRUPLE_TAKE_TWO_SINGLE', () => {
        expect(
            ruler.checkCardType([0x03, 0x03, 0x03, 0x03, 0x04, 0x05])
        ).toBe(E_TYPE.QUADRUPLE_TAKE_TWO_SINGLE);
    });
})

describe('can-defeat', () => {
    it('DOUBLE_JOKER vs SINGLE', () => {
        expect(ruler.canDefeat([0x4e, 0x4f], [0x01], E_TYPE.SINGLE).can).toBe(true);
    })
})

Code structure like below is nessary:

describe("desc-title",()=>{
      it("unit-desc-name",()=>{
          expect(function-you-want).toBe(res-you-want)
    })
})

If you get stuck, you can check the repo anytime.

Thanks for your reading.

Have a good day.

More from this blog

如何将静态页面部署到Github Page,并绑定自定义域名

在仓库主页选择setting 点击pages 选择分支branch 输入自定义域名custom domain(设置好后点击save,系统将自动在项目根目录生成CNAME文件,文件内容为设置的当前域名) 在域名提供商处,添加DNS设置(以阿里云为例) 配置CNAME 配置IP,创建一个A类记录指向185.199.108.153 github将根据访问域名路由项目仓库(仓库名称为iddz.fun,并且根目录有CNAME文件) 最后,通过访问自定义域名,完成静态网站的部署...

Oct 4, 2023
如何将静态页面部署到Github Page,并绑定自定义域名

熟悉熟悉官方文档,逐步深入Babylon.js

文档的组织结构 通过前一篇文章的了解,我们会对Babylon.js有了一个大致的了解,整个文档主要是想带你逐步深入掌握这个Babylon.js所提供的所有内容。 内容主要分为一个概览和9个主要部分,这些部分包含章节,还有API详解和强大的文档和playground搜索功能。 - 1.Babylon.js特性 - Babylon.js是一个功能完备的游戏和渲染引擎,具有广泛的特性。这个部分将带你了解这些特性,并帮助你编码和使用它们。- 2.将Babylon.js添加到你的Web项目中 - 有多种...

Sep 25, 2023
熟悉熟悉官方文档,逐步深入Babylon.js

Lizhiyu's Blog

33 posts

Bringing the world closer together through play