jest学习笔记

function.js

export default {
  sum(a, b) {
    return a + b;
  },

  getAuthor() {
    return {
      name: 'LITANGHUI',
      age: 24,
    }
  },

  getIntArray(num) {
    if (!Number.isInteger(num)) {
      throw Error('"getIntArray"只接受整数类型的参数');
    }

    let result = [];
    for (let i = 0, len = num; i < len; i++) {
      result.push(i);
    }
    
    return result;
  },


  fetchData(call) {
    setTimeout(() => {
      call('peanut butter')
    },1000);
  },

  fetchData1() {
    return new Promise(function(reslove, reject){
      reslove('1')
    })
  },

  async fetchData2() {
    const data = await fetchData1();
    return data;
  }
}

function.test.js

import functions  from '../src/function';
// 分组(Test Group):descripe(描述语,function)
// 测试用例(Test Case):test(描述语,function)
// 断言(Assert):expect(运行需测试的方法并返回实际结果).toBe(预期结果)

// jest 测试提供了一些测试的生命周期 API
// 测试之前做一些准备工作,和在进行测试后需要进行一些整理工作

// afterAll(fn, timeout): 当前文件中的所有测试执行完成后执行 fn, 如果 fn 是 promise,jest 会等待timeout 毫秒,默认 5000;
// afterEach(fn, timeout): 每个 test 执行完后执行 fn,timeout 含义同上;
// beforeAll(fn, timeout): 同 afterAll,不同之处在于在所有测试开始前执行;
// beforeEach(fn, timeout): 同 afterEach,不同之处在于在每个测试开始前执行
beforeAll(() => {
  console.log('before all tests to excute !')
})

beforeEach(() => {
  console.log('before each test !')
})

afterAll(() => {
  console.log('after all tests to excute !')
})

afterEach(() => {
  console.log('after each test !')
})

// 断言库
// 使用匹配器(相等断言)
// 普通匹配器 toBe not toEqual
// 布尔值匹配器 toBeTruthy toBeFalsy toBeUndefined
// 数字匹配器 toBeGreaterThan toBeLessThan toBeCloseTo
// 字符串匹配器 toMatch()
// 数组匹配器 toContain()
// 对象匹配器
test('sum(2 + 2) 等于 4', () => {
  expect(functions.sum(2, 2)).toBe(4);
  // expect(functions.sum(2, 2)).toBeGreaterThan(3);
  // expect(functions.sum(2, 2)).toBeGreaterThanOrEqual(3.5);
  // expect(functions.sum(2, 2)).toBeLessThan(5);
  // expect(functions.sum(2, 2)).toBeLessThanOrEqual(4.5);
})

// .toEqual匹配器会递归的检查对象所有属性和属性值是否相等,所以如果要进行应用类型的比较时,请使用.toEqual匹配器而不是.toBe
test('getAuthor()返回的对象深度相等', () => {
  expect(functions.getAuthor()).toEqual(functions.getAuthor());
})

// toBe用的是JavaScript中的Object.is(),属于ES6中的特性,所以不能检测对象,如果要检测对象的值的话,需要用到toEqual。toEquel递归检查对象或者数组中的每个字段。
test('getAuthor()返回的对象内存地址不同', () => {
  expect(functions.getAuthor()).not.toBe(functions.getAuthor());
})

// .toHaveLength可以很方便的用来测试字符串和数组类型的长度是否满足预期
test('getIntArray(3)返回的数组长度应该为3', () => {
  expect(functions.getIntArray(3)).toHaveLength(3);
})

// .toThorw可能够让我们测试被测试方法是否按照预期抛出异常,但是在使用时需要注意的是:我们必须使用一个函数将将被测试的函数做一个包装
test('getIntArray(3.3)应该抛出错误', () => {
  function getIntArrayWrapFn() {
    functions.getIntArray(3.3);
  }
  expect(getIntArrayWrapFn).toThrow('"getIntArray"只接受整数类型的参数');
})

// toMatch传入一个正则表达式,它允许我们用来进行字符串类型的正则匹配
test('getAuthor().name应该包含"li"这个姓氏', () => {
  expect(functions.getAuthor().name).toMatch(/li/i);
})

// 测试异步代码
test('the data is peanut butter', (done) => {
  function callback(data) {
    expect(data).toBe('peanut butter');
    done()
  }
  functions.fetchData(callback);
});

test('the data is 1', () => {
  // 指定了断言的次数之后,如果没有出现这么多个断言的时候,就会报错
  expect.assertions(1);

  return functions.fetchData1().then(data => {
    expect(data).toBe('1');
  }, (err) => {
    console.log(err)
  });
  // return expect(functions.fetchData1()).resolves.toBe('1');
});

test('the data is 1', async () => {
  expect.assertions(1);
  const data = await fetchData2();
  expect(data).toBe('1');
});

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值