Bun 单元测试实践

2024-03-02 16:28
文章标签 实践 单元测试 bun

本文主要是介绍Bun 单元测试实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当前要测试 index.js 文件中 requestProductList 方法,requestProductList 方法中引入了 utils.js 文件中的 getProductList 方法,getProductList 方法返回异步网络请求的数据。

index.js

import { getProductList } from './utils';/*** 获取产品列表* @returns {Promise} 产品列表*/
export const requestProductList = () => {return getProductList().then(productList => {return productList.map((item) => {return ({label: item.nameZh,value: item.nameEn,key: item.nameEn,});});})
}

utils.js

export const getProductList = () => {return Promise.resolve([]);
}export default { getProductList };

单元测试文件 index.test.js

// 导入所需的模块和函数
import * as utils from './utils';
import { requestProductList } from './index';
import { describe, expect, mock, spyOn, test } from 'bun:test';// 模拟异步网络请求结果 - 产品列表
const mockProductList = [{ nameZh: 'Product 1', nameEn: 'Product 1' },{ nameZh: 'Product 2', nameEn: 'Product 2' },{ nameZh: 'Product 3', nameEn: 'Product 3' },
];// 描述 requestProductList 函数的测试套件
describe('requestProductList', () => {// 测试 requestProductList 函数是否返回一个产品对象数组test('should return an array of product objects', async () => {// 模拟 utils 模块中的 getProductList 函数mock.module("./utils", () => ({getProductList: () => Promise.resolve(mockProductList),}));// 使用 spyOn 函数创建一个 spy 对象const spy = spyOn(utils, "getProductList");// 调用 requestProductList 函数并获取返回结果const result = await requestProductList();// 预期结果const expectedOutput = [{ label: 'Product 1', value: 'Product 1', key: 'Product 1' },{ label: 'Product 2', value: 'Product 2', key: 'Product 2' },{ label: 'Product 3', value: 'Product 3', key: 'Product 3' },];// 断言 - getProductList 是否被调用expect(spy).toHaveBeenCalled();// 断言 - 返回结果是否符合预期expect(result).toEqual(expectedOutput);});// 测试 requestProductList 函数是否返回一个空的产品对象数组test('should return an empty array of product objects', async () => {// 模拟 utils 模块中的 getProductList 函数mock.module("./utils", () => ({default: {getProductList: () => Promise.resolve([]),},getProductList: () => Promise.resolve([]),}));// 使用 spyOn 函数创建一个 spy 对象const spy = spyOn(utils, "getProductList");// 调用 requestProductList 函数并获取返回结果const result = await requestProductList();// 断言 - getProductList 是否被调用expect(spy).toHaveBeenCalled();// 断言 - 返回结果是否符合预期expect(result).toEqual([]);});
});

这篇关于Bun 单元测试实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/766744

相关文章

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实