JEST断言库(常用api)

Expect

当你写测试,你经常需要检查值满足一定的条件。expect 可以访问一些“匹配器”来判断是否能够通过验证 如:

test('first use expect', function () {
  expect(1 + 1).toBe(2);
});

expect.extend

我们可以expect.extend扩展自己编写的函数 如:

expect.extend({
  toNaN(received, argument) {
    if (isNaN(received)) {
      return {
        message: () => (
          `expected ${received} is NaN`
        ),
        pass: true,
      };
    } else {
      return {
        message: () => (
          `expected ${received} not NaN`
        ),
        pass: false,
      };
    }
  },
});

test('even and odd numbers', () => {
  expect('d').toNaN();
});

.not

.not可以测试相反的东西 

test('.not', () => { expect(1 + 1 ).not.toBe(3); });

.toBe(value)

可以用来断言你expect的值 

const Dog = { name: 'hasiqi', age: 1, };
describe('Dog', () => {
  test('name', () => {
    expect(Dog.name).toBe('hasiqi');
  });

  test('age', () => {
    expect(Dog.age).toBe(1);
  });
});

.toEqual(value)

使用.toEqual时要检查两个对象具有相同的值。该匹配器递归地检查所有字段的相等性,而不是检查对象的身份-这也称为“深度相等” 如:

const can1 = {
  flavor: 'grapefruit',
  ounces: 12,
};
const can2 = {
  flavor: 'grapefruit',
  ounces: 12,
};

describe('the La Croix cans on my desk', () => {
  test('have all the same properties', () => {
    expect(can1).toEqual(can2);
  });
  test('are not the exact same can', () => {
    expect(can1).not.toBe(can2);
  });
});

 

.toHaveBeenCalled()

用于判断你的函数是否有被调用 function callFn(fn, name) { if (name === 'octopus') { fn() } }

test('toHaveBeenCalled', () => {
  const fn = jest.fn();
  callFn(fn, 'octopus');
  expect(fn).toHaveBeenCalled();
});
复制代码

.toBeDefined()

用户判断默认变量是否已经被定义 或者可以用来判断函数有返回值 如:

function testTobeDefined() {
  return {}
}
test('toBeDefined', () => {
  const a = '1';
  expect(a).toBeDefined();
  expect(window.b).not.toBeDefined();
  expect(testTobeDefined()).toBeDefined();
});
复制代码

toBeUndefined()

和toBeDefined 相反

.toBeFalsy

.toBeFalsy当您不在乎值是什么时使用,只需要确保在布尔上下文中值是假(false, 0, '', null, underfined, NaN) 如:

function testToBeFalsy() {
  return false;
}
function testToBeTrue() {
  return true;
}
test('toBeFalsy', () => {
  expect(testToBeFalsy()).toBeFalsy();
  expect(testToBeTrue()).not.toBeFalsy();
});
复制代码

.toBeTruthy()

和toBeFalsy相反

toBeGreaterThan

可用于判断是指的大小,不包括等于 如: function ouncesPerCan() { return 11; }

test('ounces per can is more than 10', () => {
  expect(ouncesPerCan()).toBeGreaterThan(10);
});
复制代码

toBeGreaterThanOrEqual

大于等于

.toBeLessThan

小于

.toBeLessThanOrEqual

小于等于

.toBeInstanceOf(Class)

用于判断某个对象是否集成于默认构造函数 如: class A {}

expect(new A()).toBeInstanceOf(A);
expect(() => {}).toBeInstanceOf(Function);
expect(new A()).toBeInstanceOf(Function)
复制代码

.toBeNull()

.toBeNull() is the same as .toBe(null)

.toContain(item)

用于断言list中是否包含某个item

// toContain
test('toContain', () => {
  expect(['item', 'item2']).toContain('item');
});
复制代码

.toContainEqual(item)

用于断言list中是否包含某个item, 此匹配器递归地检查所有字段的相等性,而不是检查对象标识

test('is delicious and not sour', () => { 
const myBeverage = {delicious: true, sour: false};
expect([{delicious: true, sour: false}, {delicious: true, sour: true, age: 1}])
.toContainEqual(myBeverage); });

.resolves

可以用来测试promise resolve的值 如:

test('resolves to lemon', async () => {
  await expect(Promise.resolve('lemon')).resolves.toBe('lemon');
  await expect(Promise.resolve('lemon')).resolves.not.toBe('octopus');
});
复制代码

.rejects

可以用来测试promise rejects的值 如:

test('rejects to lemon', async () => {
  await expect(Promise.rejects('lemon')).rejects.toBe('lemon');
  await expect(Promise.rejects('lemon')).rejects.not.toBe('octopus');
});    
复制代码

.toHaveLength(number)

判断object 的length值 如:

expect([1, 2, 3]).toHaveLength(3);
expect('abc').toHaveLength(3);
复制代码

.toMatch(regexpOrString)

匹配某个正则

expect('grapefruit111').toMatch(/grapefruit/); 
expect('grapefruit111').toMatch(new RegExp('grapefruit'));

.toHaveProperty(keyPath, value)

去判断某个对象是否有某个属性 以及判断它的属性值 如:

const houseForSale = {
  bath: true,
  bedrooms: 4,
  kitchen: {
    amenities: ['oven', 'stove', 'washer'],
    area: 20,
    wallColor: 'white',
  },
};

test('this house has my desired features', () => {
  // Simple Referencing
  expect(houseForSale).toHaveProperty('bath');
  expect(houseForSale).toHaveProperty('bedrooms', 4);

  expect(houseForSale).not.toHaveProperty('pool');

  // Deep referencing using dot notation
  expect(houseForSale).toHaveProperty('kitchen.area', 20);
  expect(houseForSale).toHaveProperty('kitchen.amenities', [
    'oven',
    'stove',
    'washer',
  ]);

  expect(houseForSale).not.toHaveProperty('kitchen.open');
});
复制代码

.toThrow(error)

用于判断函数抛出的错误 如:

function drinkFlavor(flavor: string) {
  if (flavor == 'octopus') {
    throw new Error('yuck, octopus flavor');
  }
  // Do some other stuff
}
test('throws on octopus', () => {
  function drinkOctopus() {
    drinkFlavor('octopus');
  }

  // Test the exact error message
  expect(drinkOctopus).toThrowError('yuck, octopus flavor');

  // Test that the error message says "yuck" somewhere
  expect(drinkOctopus).toThrowError(/yuck/);

});
<think>好的,我现在需要帮用户查找Node.js常用的库。首先,我得回忆一下Node.js生态系统中有哪些流行的库。根据之前用户提供的引用内容,比如引用[5]提到了Express和Sequelize,这些都是常用的库。我应该从这些入手,然后扩展到其他常见的库。 用户可能需要一个分类列表,这样更方便查找。比如Web框架、数据库ORM、模板引擎、测试工具、实用工具等。Express作为最流行的Web框架,肯定是第一个要提到的。然后Koa和Nest.js也是不错的补充,特别是Nest.js使用了TypeScript,适合大型项目。 数据库方面,Sequelize和Mongoose都是ORM/ODM,分别支持SQL和MongoDB。用户可能对这两种数据库都有需求,所以都应该包括进来。另外,Prisma现在也挺流行的,可以加入进去。 模板引擎方面,EJS、Pug和Handlebars都是常见的选择,用户可能需要根据项目需求选择不同的模板引擎,所以列出这几个比较合适。 测试工具方面,Jest和Mocha都是主流,Jest更现代化,内置支持多,而Mocha比较灵活,可能需要搭配其他库使用。所以这两个都应该提到。 实用工具库的话,Lodash和Axios非常常用。Lodash提供各种工具函数,Axios用于HTTP请求。Nodemon在开发时自动重启服务,对开发体验提升很大,必须包括进去。 日志管理库Winston和PM2作为进程管理工具也很重要,特别是生产环境部署时常用。这些都应该涵盖。 另外,用户可能还需要知道如何安装这些库,所以在每个库后面加上安装命令会更有帮助,比如引用[5]中提到的npm install express。这样用户可以直接复制命令安装。 最后,生成相关问题的时候,应该围绕如何选择库、具体库的使用方法、安装问题、组合使用等,这样用户如果有进一步的问题,可以继续提问。比如Express和Koa的区别,或者如何用Sequelize连接数据库,这些都是常见的问题。 需要确保分类清晰,每个类别下列举两到三个库,并简要说明用途和安装命令。同时,引用对应的参考资料,比如引用[5]提到Express和Sequelize,引用[2]提到常用命令和工具,这些都需要在回答中正确标注引用标记。 检查是否有遗漏的重要库,比如Socket.io用于实时通信,或者GraphQL相关的库如Apollo Server,但可能用户的需求是常用库,所以暂时先列出最核心的部分。如果有必要,可以在相关问题中引导用户询问更多特定领域的库。 总结下来,结构应该是先分大类,每个类别下列举库的名称、用途、安装命令,并适当添加引用标记。最后生成相关问题,帮助用户深入探索。</think>### Node.js 常用库列表 以下是 Node.js 生态系统中常用的核心库及其分类,涵盖开发工具、框架、数据库操作等场景: --- #### **1. Web 框架** - **Express** 用途:轻量级 Web 框架,用于构建 RESTful API 和 Web 应用。 安装命令: ```bash npm install express ``` 示例代码: ```javascript const express = require('express'); const app = express(); app.get('/', (req, res) => res.send('Hello World!')); app.listen(3000); ``` 引用支持:Express 是 Node.js 生态中使用最广泛的框架[^5]。 - **Koa** 用途:由 Express 原团队设计的更轻量、异步友好的框架。 安装命令: ```bash npm install koa ``` - **NestJS** 用途:基于 TypeScript 的企业级框架,支持依赖注入和模块化设计。 安装命令: ```bash npm install @nestjs/core ``` --- #### **2. 数据库 ORM/ODM** - **Sequelize** 用途:支持多种 SQL 数据库(如 MySQL、PostgreSQL)的 ORM 工具。 安装命令: ```bash npm install sequelize ``` 引用支持:Sequelize 常用于处理关系型数据库操作。 - **Mongoose** 用途:MongoDB 的 ODM 库,提供 Schema 建模和查询接口。 安装命令: ```bash npm install mongoose ``` - **Prisma** 用途:现代数据库工具链,支持类型安全的数据库访问。 安装命令: ```bash npm install prisma ``` --- #### **3. 模板引擎** - **EJS** 用途:嵌入式 JavaScript 模板引擎,语法简单。 安装命令: ```bash npm install ejs ``` - **Pug** 用途:缩进式模板引擎,简化 HTML 编写。 安装命令: ```bash npm install pug ``` --- #### **4. 测试工具** - **Jest** 用途:现代化的测试框架,支持覆盖率报告和快照测试。 安装命令: ```bash npm install jest --save-dev ``` - **Mocha** 用途:灵活的测试框架,常与断言库(如 Chai)配合使用。 安装命令: ```bash npm install mocha --save-dev ``` --- #### **5. 实用工具库** - **Lodash** 用途:提供高效的数据操作工具函数(如数组处理、对象深拷贝)。 安装命令: ```bash npm install lodash ``` - **Axios** 用途:基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js。 安装命令: ```bash npm install axios ``` - **Nodemon** 用途:监听文件变化并自动重启服务,提升开发效率。 安装命令: ```bash npm install nodemon --save-dev ``` --- #### **6. 其他关键库** - **Winston** 用途:灵活的日志管理库,支持多种日志传输方式。 安装命令: ```bash npm install winston ``` - **Socket.IO** 用途:实现实时双向通信的 WebSocket 库。 安装命令: ```bash npm install socket.io ``` - **PM2** 用途:进程管理工具,支持负载均衡和监控。 安装命令: ```bash npm install pm2 -g ``` --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值