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([]);
    });
});
  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值