Vitest

作者: sweetBoy_9126 | 来源:发表于2024-04-12 20:19 被阅读0次

    test/it

    • it: BDD 行为驱动开发基于 TDD(测试驱动开发)
      用法:it should xxx xxx
      相关框架: Mocha, Jasmine

    • test
      相关框架:jest
      用法:test("should xxx xxxx", () => {})

    风格问题

    describe

    创建一个测试套件
    帮助我们把相同行为的测试放在一起,方便我们维护我们的测试

    describe('add', () => {})
    

    expect

    • toBe 等于
      全等 ===
      场景:一般用于基本类型
    it('toBe', () => {
      expect(1).toBe(1)
    })
    
    • toEqual 等于
      场景:对象之间的比较
    it('toEqual', () => {
      const user = { name: 'lifa' }
      expect(user).toEqual({name: 'lifa'})
    })
    
    • toBeTruthy
      场景:当前值是一个真值
    it('toBeTruthy', () => {
      expect(1).toBeTruthy()
      expect(true).toBeTruthy()
      expect('1234').toBeTruthy()
    })
    
    • toBeFalsy
      场景:当前值是一个假值
    it('toBeFalsy', () => {
      expect(0).toBeFalsy()
      expect(false).toBeFalsy()
      expect('').toBeFalsy()
    })
    
    • toContain
      包含某个值
      场景:数组/string里是否包含某个值
    it('toContain', () => {
      const item1 = {name: 'lifa'}
      const list = [item1]
      expect(list).toContain(item1)
    
      expect('<div>1234</div>').toContain('1234')
    })
    
    • toThrow
      场景:检测函数会不会抛出 error
    it('toThrow', () => {
      function getName(name) {
        if (typeof name !== 'string') {
          throw new Error('错误的name')  
        }
        return 'hei'
      }
      expect(() => {getName(111)}).toThrow()
      expect(() => {getName(111)}).toThrow('错误的name')
    })
    

    setup & teardown

    执行顺序

    • beforeAll
      当前文件所用的test之前调用,只执行一次
      场景:数据库连接、创建临时文件
      配合 return 代替 afterAll
    beforeAll(() => {
      return () => {
        // afterAll
      }
    })
    
    • beforeEach
      每个 test 之前调用,每次都会执行
      场景:pinia 每次创建一个新的 store
      配合 return 代替 afterEach
    beforeEach(() => {
      return () => {
        // afterEach
      }
    })
    

    afterEach
    每个 test 之后调用,每次都会执行

    • afterAll
      当前文件所用的test之后调用,只执行一次
      场景:数据库断开连接、临时文件需要删除
    import {beforeAll, beforeEach, afterEach, afterAll} from 'vitest'
    beforeAll(() => {
      console.log('before all')
    })
    beforeEach(() => {
      console.log('before each')
    })
    test('frist', () => {
      console.log('first')
    })
    test('second', () => {
      console.log('second')
    })
    afterEach(() => {
      console.log('after each')
    })
    afterAll(() => {
      console.log('after all')
    })
    

    执行顺序为
    before all -> before each -> first -> after each -> before each -> second -> after each -> after all
    加入 describe

    beforeAll(() => {
      console.log('before all')
    })
    beforeEach(() => {
      console.log('before each')
    })
    test('frist', () => {
      console.log('first')
    })
    test('second', () => {
      console.log('second')
    })
    afterEach(() => {
      console.log('after each')
    })
    afterAll(() => {
      console.log('after all')
    })
    
    describe('sub', () => {
      beforeEach(() => {
         console.log('sub: before each')
       })
      test('sub first', () => {
            console.log('sub first')
      })
      afterEach(() => {
         console.log('sub: after each')
       })
    })
    

    before all -> before each -> first -> after each -> before each -> second -> after each -> before each -> sub:before each -> sub first -> sub: after each -> after each -> after all
    会先执行外部的 beforeEach 然后再内部的

    filter

    1. test.only
      只执行这个 test
    2. test.skip
      跳过这个 test
    3. test.todo('')
      注释:列举我们要实现的,等到我们实现后就把.todo 删掉
    // xxx add 
    test.todo('add')
    
    1. 启用命令
      pnpm test 具体的文件名
    pnpm test test.spec
    

    ci

    scripts: {
      "test": "vitest"
    }
    

    默认是 watch 模式每次修改后都会重新执行,如果不想后面加 run,运行一次就退出

    vscode 插件

    vitest snippets
    jest snippets

    相关文章

      网友评论

          本文标题:Vitest

          本文链接:https://www.haomeiwen.com/subject/vtckxjtx.html