• 0
  • 0
分享

  Jest 是一个简单易用的 JavaScript 测试框架。最初由 Meta 公司团队维护。2022 年 5 月,Meta 公司正式将自己的开源项目Jest 移交给 OpenJS Foundation[1],这表示 Jest 由公司驱动变为社区驱动,有 OpenJS Foundation 保底,Jest 将不会因公司发展需要而停止维护。

  下面我们就来学习吧。

  快速上手

  初始化项目

  首先创建项目目录:

  mkdir jest-demos && cd jest-demos
  npm init -y

  然后,安装 Jest 依赖:

  npm install --save-dev jest

  第一个测试文件

  创建待测试文件 src/sum.js:

  function sum(a, b) {
    return a + b;
  }
  module.exports = sum;

  创建测试文件 __tests__/sum.test.js:

  const sum = require('../src/sum');
  test('adds 1 + 2 to equal 3', () => {
    expect(sum(1, 2)).toBe(3);
  });

  注:按照约定,测试文件以 .test.js 或 .spec.js 结尾,并且放在 __tests__ 目录中。

  package.json 文件中增加脚本:

  {
    "scripts": {
      "test": "jest"
    }
  }

  终端上执行命令 npm test,查看结果。

1-1.png

  这样我们就完成了第一个测试文件的编写和集成。

  存在的问题

  不过目前存在 2 个问题:

  · Jest 只支持 CommonJS 代码,并不支持 ES Module 代码,为了测试 ES Module 代码,我们只能将 ES Module 代码转换为 CommonJS 代码

  · Jest 也不支持 TypeScript 代码

  如何解决呢?有 2 个方案:

  使用 Babel + @babel/preset-env + @babel/preset-typescript 的组合,或者

  使用 ts-jest(基于 TypeScript)

  不过为了得到完整的类型检查支持,我们选择 ts-jest。下面就来学习。

  配置 ts-jest

  ts-jest 本质上就是 Jest transformer,支持你在 TypeScript 项目里使用 Jest。

  这部分配置我们参照官方教程[2]。

  安装必要依赖

  首先安装必要依赖:

  npm install --save-dev ts-jest jest typescript @types/jest

  · ts-jest 是我们必须要安装的

  · ts-jest 依赖 jest 和 typescript,因此也安装下(jest 在上一步已经安装,所以在这里是可选的)

  · 安装 @types/jest 是为了获取类型提示支持

  生成配置文件

  然后,生成 Jest 配置文件——这里借助 ts-jest 指令来生成:

  npx ts-jest config:init

  这一步会在项目根目录下创建 jest.config.js 文件:

  /** @type {import('ts-jest').JestConfigWithTsJest} */
  module.exports = {
    preset: 'ts-jest',
    testEnvironment: 'node',
  };

  修改文件后缀

  将 src/sum.js 和 __tests__/sum.test.js 的文件后缀改成 .ts,并将代码改成 ES Module 方式组织。

  // src/sum.ts
  function sum(a, b) {
    return a + b;
  }
  export default sum;
  // __tests__/sum.test.ts
  import sum from "../src/sum";
  test("adds 1 + 2 to equal 3", () => {
    expect(sum(1, 2)).toBe(3);
  });

  终端上执行命令 npm test,查看结果。

1-2.png

  也成功了。不过有一条告警,建议我们将 tsconfig.json 中的 esModuleinterop 字段设置成 true。

  释出 tsconfig.json

  为了设置 esModuleinterop 字段,我们将 tsconfig.json 文件释放出来。

  $ npx tsx --init
  Created a new tsconfig.json with:         
                                             TS
    target: es2016
    module: commonjs
    strict: true
    esModuleInterop: true
    skipLibCheck: true
    forceConsistentCasingInFileNames: true

  释出的配置中包含 esModuleInterop: true 选择,因此我们也无需修改。不过因为开启了严格模式(strict: true),因此还要对源代码做类型注解。

  // src/sum.ts
  function sum(a: number, b: number) {
    return a + b;
  }
  export default sum;

  再次运行测试——成功!

1-3.png


作者:写代码的宝哥    

来源:http://www.51testing.com/html/85/n-7798485.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   ChatGPT 免费用户现已能够尝试自定义 GPT 模型、分析图表等其他 GPT-4o 新功能。当然,OpenAI 在推出 GPT-4o 时就承诺它将免费向所有用户开放,而付费用户的优势在于“拥有免费用户五倍的容量限制”。  在此以前,诸如模型和网络响应、数据分析、图表创建、视觉、文件上传、内存和自定义 GPT 模型等功能仅对付费用户(ChatGPT Plus、Teams 和 Enterprise)开放,但现在已经面向所有 ChatGPT 用户开放(IT之家提醒:当免费用户使用 GPT-4o 达到消息或对话限制时将自动恢复到 GPT-3.5)。  值得一提的是,虽然 ChatGPT 免费用...
            0 0 207
            分享
          •   实现优先级队列最常用的数据结构是堆,堆的常见实现有二叉堆、斐波那契堆、二项堆等。  二叉堆  堆是一种完全二叉树,我们以小根堆为例,小根堆的性质就是,每个节点都小于其左孩子和右孩子,不难发现,这种二叉树,根的值是最小的。  堆有以下几种操作:堆的初始化、修改某个值(规定修改之后的值小于等于原来的值)、插入某个值、取出根节点(即取出该优先队列中的优先级最高的值)。  在进行这几种操作的时候,要维护堆的性质。  堆的存储  我们不难发现以下结论:在一棵完全二叉树中,假设节点下标从0开始,那么点i的左孩子的下标为 (i<<1)+1,右孩子的下标为(i<<1)+2 ,父节点...
            0 0 724
            分享
          •   年初,目标规模 100 亿元的北京机器人产业发展投资基金注册落地经开区,将助力北京打造世界领先的人形机器人产业发展高地。最近,北京人形机器人创新中心传来好消息,近期将发布第一代通用开放人形机器人本体。  报道称,人形机器人集成人工智能、高端制造、新材料等先进技术,有望成为继计算机、智能手机、新能源汽车后的颠覆性产品,深刻变革人类生产生活方式,重塑全球产业发展格局。作为人形机器人行业的聚合高点,2023 年年底,北京人形机器人创新中心有限公司正式成立,由人形机器人行业领军企事业单位联合组建,包括小米机器人、优必选科技、京城机电、中国科学院自动化所等,聚集了一大批人形机器人行业的顶级专家和技术...
            0 0 733
            分享
          • 目前,神舟十四号航天员乘组在轨工作生活将近三个月,各项工作顺利推进,已经展开了大量的在轨科学实验。据央视新闻报道,8 月 29 日,载人航天工程空间应用暨空间站高等植物培养实验阶段性进展情况介绍会在中科院空间应用中心及分子植物卓越中心举行。据介绍,截至目前,问天实验舱各有效载荷状态良好、工作稳定,随舱发射科学实验项目在轨实验按计划开展。载有实验样品拟南芥种子和水稻种子的实验单元已由航天员安装至问天实验舱的生命生态通用实验模块中,目前植物已经发芽生长。7 月 28 日,载有实验样品拟南芥种子和水稻种子的实验单元,由航天员安装至问天实验舱的生命生态通用实验模块中,通过地面程序注入指令于 7 月 2...
            0 0 680
            分享
          •   一、为什么你会有软件测试行业前景和出路的疑问?  很多人说测试简单,没有技术含量。而且在网上搜索了很多测试的信息,越来越迷茫,相信你搜到信息是测试没有前途的这些话:如:  “测试就是点点”、  “测试工资低”、  “测试很枯燥”、  “测试容易背锅”、  “测试需要加班”、  “测试是生物链的底层”  .....  如果相信上面观点的人是“测试人员”,那么结果很显然,他没有深入的去做好这份工作。如果相信上面观点的是“其他岗位”,那么结果也亦然,他们没有深入了解测试这个岗位,没有遇到专业的测试人员。  网上出现上述有关测试的负面评论,根源在于之前企业对测试人员的要求较低。  但现在,企业对测...
            0 0 1097
            分享
      • 51testing软件测试圈微信