news 2026/8/30 14:07:05

【MongoDB实战】8.3 简易商品管理系统-测试与优化 完善版

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【MongoDB实战】8.3 简易商品管理系统-测试与优化 完善版

《MongoDB实战入门》第8章 实战项目1:简易商品管理系统

8.3 简易商品管理系统-测试与优化 完善版

前置说明

本章实战基于Node.js + Mongoose操作MongoDB(需MongoDB 4.0+,事务依赖副本集),先完成基础环境准备:

    1. 安装依赖:npm install mongoose mocha chai --save-dev
    1. 启动MongoDB副本集(事务必备):参考MongoDB官方文档搭建单节点/多节点副本集,命名为rs0
    1. 基础数据模型(models/product.js):定义商品核心字段
// models/product.jsconstmongoose=require('mongoose');// 商品Schema定义constproductSchema=newmongoose.Schema({name:{type:String,required:true,trim:true},// 商品名称category:{type:String,required:true,trim:true},// 商品分类price:{type:Number,required:true,min:0},// 商品价格stock:{type:Number,required:true,min:0,default:0},// 库存(非负)createTime:{type:Date,default:Date.now},// 创建时间updateTime:{type:Date,default:Date.now}// 更新时间});// 预更新钩子:自动更新updateTime(适配高版本Mongoose,移除next参数)productSchema.pre('save',asyncfunction(){this.updateTime=Date.now();});// 导出模型constProduct=mongoose.model('Product',productSchema);module.exports=Product;
  1. MongoDB公共连接配置(utils/db.js,统一管理连接逻辑):
// utils/db.jsconstmongoose=require('mongoose');// 数据库连接配置(统一配置,避免重复编码)constDB_URI='mongodb://localhost:27017,localhost:27018,localhost:27019/product_manage?replicaSet=rs0';async functionconnectDB(){try{// 高版本Mongoose无需useNewUrlParser等废弃选项await mongoose.connect(DB_URI);console.log('MongoDB副本集连接成功');}catch(err){console.error('MongoDB连接失败:',err);process.exit(1);}}// 统一断开连接方法async functiondisconnectDB(){try{await mongoose.disconnect();console.log('MongoDB连接已断开');}catch(err){console.error('MongoDB断开连接失败:',err);}}module.exports={connectDB,disconnectDB};

8.3.1 功能测试:接口调用验证核心功能

测试目标

验证商品「新增、查询、更新库存、删除」核心接口的正确性,采用Mocha+Chai编写单元测试。

测试代码(test/product.test.js
constchai=require('chai');constexpect=chai.expect;constmongoose=require('mongoose');constProduct=require('../models/product');const{connectDB,disconnectDB}=require('../utils/db');// 全局前置:仅连接数据库,不全局清空数据before(async()=>{awaitconnectDB();});// 调整:仅清理测试用例生成的临时数据(不清理核心的10条商品数据)// 临时数据标识:名称包含「测试商品」「待删除商品」beforeEach(async()=>{await Product.deleteMany({name:{$in:['测试商品','待删除商品']}});});// 新增:每个用例结束后,仅清理当前用例的临时数据(进一步保证数据保留)afterEach(async()=>{await Product.deleteMany({name:{$in:['测试商品','待删除商品']}});});// 全局后置:仅断开数据库,不清理核心数据after(async()=>{awaitdisconnectDB();});// 测试套件:商品CRUD功能describe('商品管理系统核心功能测试',()=>{// 用例1:新增商品 - 批量生成10条核心数据(执行后保留)it
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 4:02:08

深入解析Red Hat Certified Architect(RHCA)认证,年终钜惠!

大家好,这里是G-LAB IT实验室。 在快速发展的IT行业中,能力认证已成为IT专业人员展示其专业技能和深厚知识的重要标志。而在众多IT认证中,Red Hat Certified Architect(RHCA)无疑是一颗璀璨的明珠。 本文将为您详细解析…

作者头像 李华
网站建设 2026/8/30 6:06:41

EPLAN电气设计:轻松修改设备标识符字母

EPLAN电气设计:轻松修改设备标识符字母在EPLAN里改设备标识符的字母,有两种简单的方法可以用。方法一:换掉标识字母集(这个办法最省事儿)1、打开标识字母管理:点击菜单栏【工具】→【主数据】→【标识字母】…

作者头像 李华
网站建设 2026/8/29 19:12:13

指纹浏览器是什么?国内主流的指纹浏览器有哪些?

指纹浏览器,是在普通浏览器基础上,加入“浏览器指纹伪装 多环境隔离”的一类工具。 平台在识别账号时,不只看 IP,还会采集操作系统、浏览器 UA、屏幕分辨率、字体、Canvas、WebGL、语言、时区等各种参数,这组参数就像…

作者头像 李华
网站建设 2026/8/29 4:30:03

大模型提示词工程:从入门到精通的AI对话艺术指南

本文系统介绍了AI提示词工程的核心原理与实用技巧,详细讲解了构建优质提示词的四大要素(角色、背景信息、任务指令、期望输出),并分享了角色扮演、范例提供、追问迭代、主动推理等多种实用方法,同时涵盖了功能性提示词…

作者头像 李华
网站建设 2026/8/30 9:09:31

海外仓如何应对东南亚查仓?合规把控让商品零被扣风险

最近东南亚似乎不太平——从泰国仓库被突袭、百万件商品被扣,到马来西亚一次性查获70多万件中国电子烟,越南芒市7月也查获短短几个月4.7万余件违规货物,一波接一波的监管行动,让不少同行一夜之间陷入破产危机,真是让我…

作者头像 李华
网站建设 2026/8/30 3:24:02

数字孪生平台厂商盘点:这6个玩家的技术路径/产品核心/市场格局解读

数字孪生,作为实现物理世界与数字空间实时交互、仿真优化的关键技术,正成为驱动工业制造、智慧城市、基础设施管理等行业数字化转型的核心引擎。其通过数据集成、模型构建与仿真分析,为预测性维护、流程优化和智能决策提供了前所未有的可能性…

作者头像 李华