首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

集成测试节点‘t/Express/ Mongoose与Jest/Supertest一个Mongoose模型保存,一个Mongoose模型不保存

集成测试是软件开发中的一种测试方法,用于检测系统不同组件之间的交互和集成的正确性。在云计算领域,集成测试节点是指在分布式系统中的一个节点,负责执行集成测试任务。

在这个问答内容中,t/Express是指一个使用Express框架搭建的Web应用程序,Mongoose是一个Node.js的MongoDB对象模型工具,Jest是一个用于JavaScript的测试框架,Supertest是一个用于发送HTTP请求的工具。在这个场景中,使用Jest和Supertest对t/Express进行集成测试。

具体操作流程如下:

  1. 安装依赖:在项目根目录下,使用npm安装Jest、Supertest和Mongoose:
代码语言:txt
复制
npm install --save-dev jest supertest mongoose
  1. 创建集成测试文件:在项目根目录下,创建一个名为integration.test.js的文件,并编写以下代码:
代码语言:txt
复制
const request = require('supertest');
const app = require('./t/Express'); // 导入t/Express应用程序
const mongoose = require('mongoose');
const Model = require('./t/Model'); // 导入Mongoose模型

describe('Integration Tests', () => {
  beforeAll(async () => {
    await mongoose.connect('mongodb://localhost/test', {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    });
  });

  afterAll(async () => {
    await mongoose.disconnect();
  });

  afterEach(async () => {
    await Model.deleteMany({});
  });

  test('Save model', async () => {
    const data = { name: 'John Doe' };

    const response = await request(app)
      .post('/api/model')
      .send(data)
      .expect(200);

    expect(response.body.name).toBe('John Doe');
    expect(response.body._id).toBeDefined();

    const savedModel = await Model.findById(response.body._id);
    expect(savedModel.name).toBe('John Doe');
  });

  test('Don't save model', async () => {
    const data = { name: 'John Doe' };

    const response = await request(app)
      .post('/api/model')
      .send(data)
      .expect(400);

    expect(response.body.error).toBe('Model not saved');
  });
});
  1. 编写t/Express应用程序:在项目根目录下创建一个名为t/Express.js的文件,并使用Express框架编写一个简单的应用程序:
代码语言:txt
复制
const express = require('express');
const app = express();

app.use(express.json());

app.post('/api/model', (req, res) => {
  const { name } = req.body;

  if (!name) {
    return res.status(400).json({ error: 'Model not saved' });
  }

  // 处理模型保存逻辑
  const model = new Model({ name });
  model.save();

  return res.status(200).json(model);
});

module.exports = app;
  1. 编写t/Model模型:在项目根目录下创建一个名为t/Model.js的文件,并使用Mongoose定义一个简单的模型:
代码语言:txt
复制
const mongoose = require('mongoose');

const modelSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
});

const Model = mongoose.model('Model', modelSchema);

module.exports = Model;
  1. 运行集成测试:在命令行中执行以下命令,运行集成测试:
代码语言:txt
复制
npx jest integration.test.js

运行结果将显示测试是否通过。

推荐的腾讯云相关产品:云服务器(CVM)、云数据库MongoDB、云函数(SCF)。

  • 腾讯云服务器(CVM):提供可弹性扩展的云服务器实例,适用于托管应用程序和进行服务器运维。
  • 腾讯云数据库MongoDB:全球分布式的NoSQL数据库服务,适用于存储和管理大规模的非结构化数据。
  • 腾讯云函数(SCF):事件驱动的无服务器计算服务,适用于开发和运行云端应用程序的后端逻辑。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Week14-服务端选型:磨刀不如砍柴功

第一章 周介绍 1-1 本周介绍 服务端选型:所有技术为业务服务 nodejs框架选型:Koa2 数据库:Mysql Mongodb Redis 登录校验:JWT 单元测试接口测试Jest...Jest 和Mocha 单元测试为何难以落实 supertest接口测试 测试驱动开发TDD 5-2 介绍Jest和Mocha Jest官网:https://jestjs.io/zh-Hans/docs...使用方式不合理:混淆了单元测试集成测试,导致单元测试代码中有太多Mock。...如果需要服务器启动才能执行的代码,就不是单元测试了。 **现状:**研发流程规范 5-4 supertest接口测试 supertest接口测试的目的是让所有接口稳起来。...本地测试jest + supertest 远程测试jest + axios 接口测试和单元测试,代码都放在 __test__下,但两者概念要区分开。

2K30
  • 三步带你开发一个短链接生成平台

    现在市面上可用的就是微博的t.cn和一些第三方的生成短链接工具,但这两类工具都有一些使用上的问题,例如:t.cn现在的规则是会出现一个中转页不会直接跳转,而第三方的工具因为是一个公共平台,有时可能会因一些不良信息导致整个平台无法访问...那与其这样,不如我们自己来实现一个短链接平台吧,实现一个短链接平台原理上也非常简单,搞定两部分就行了:1.保存长短链接的对应关系。2.通过短链接查询长连接并重定向。...首先,我们先创建一个express工程 express -e demo change directory: > cd demo install dependencies:...启动应用并测试 npm start 启动后,默认的访问端口为3000,我们首先测试下短链接生成页,这里我们post一个名为longUrl的长链接参数,数据对象为: {"longUrl" : "https...成功生成了如下短链接: http://localhost:3000/iGE6ZlDmh 我们只要通过访问短链接能正常跳转至保存的长连接即可。 ? 这样就测试通过了,其实代码量不大,原理也很简单。

    3.1K30

    Mongoose 插件记录Node.js API日志

    我们将使用流行的ORM Mongoose 讨论 Node.js Express 程序中的 API 日志记录。...步骤1:创建基本日志模式模型 让我们创建一个具有以下六个属性的基本日志模式: Action: 按照它的名称,这是 API 的一个动作过程,无论是 create、update、delete还是别的什么。...这是我们的模型:models/log.js const mongoose = require('mongoose') const Schema = mongoose.Schema const { ObjectId...步骤3:创建一个插件用来 diff 并将其保存到数据库 现在我们需要跟踪数据库中的前一个 document 并在保存到 mongodb 之前创建一个 diff。...你还可以通过在架构模型中初始化它来将其用于特定架构。 const mongoose = require('mongoose') mongoose.plugin(require('.

    2.7K40

    Express中对MongoDB数据库进行增删改查

    建立好上述开发环境后,打开VSCode,在一个目录中新建一个EXPRESS-TEST的文件夹,用于存放项目文件,新建一个server.js文件用于存放代码,test.http存放rest-client编写的接口用于测试客户端的...mongoose cnpm install cors 使用Express启动http服务 Express一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能...,简单易用,下面的代码演示了如何使用Express在指定的4001端口上监听,开启一个http服务,当然端口可以随意指定,只要和系统中其他冲突即可,感觉使用起来比Java SpringBoot简单不少...}) 在NodeJs中对MongoDB数据库进行增删改查 连接MongoDB数据库 新建一个MongoDB数据库模型,命名为express-test const mongoose = require('...({ title: { type: String, unique: true} }) // 定义MongoDB数据模型 (表=》集合) const Product = mongoose.model

    5.3K10

    2020年,你应该知道 23 个非常有用的 NodeJs 库

    Passport.js 是一个简单的、非侵入式的 Node.js 身份验证中间件,它可以集成到任何基于 Express.js 的 web 应用中 6....既然Nodejs的强项在于异步,没有理由一个强大的支持异步的数据库框架,之配合。 14 Mongoose 地址:https://www.npmjs.com/package/mongoose ?...Mongoose是mongoDB的一个对象模型库,封装了mongoDB对文档的一些增删改查等常用方法,让nodejs操作mongoDB数据库变得更容易。...15 Jest 地址:https://www.npmjs.com/package/jest ?...Jest 是由 Facebook 推出的一个前端测试框架,具有许多非常好的特性,譬如执行速度快、API友好、自动监控、Snapshot、测试覆盖率、Mock等各种特性,并且适用于Babel、TypeScript

    3.3K30

    从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(二)

    下载并安装好之后,新打开一个终端(命令控制台),运行以下命令打开数据库(Windows 用户可以搜索 mongo.exe 并打开): $ mongod 2019-12-22T18:10:25.285+0800...设计数据库的 Schemas 和 Models 我们要在服务器中通过 mongoose MongoDB 数据库进行交互,需要定义 Schema 和 Model。...接着我们通过 model 来创建对于的数据模型,然后导出我们创建好的数据模型。这里的 model 就是经典的 MVC 设计模式中的 Model。...完成 API 路由 路由是 Express 的关键组成部分,也是客户端服务器进行交互的入口,在 Express 路由中接受两个参数:Request 和 Response,一个用来获取客户端的请求,一个用来发送给客户端服务器的响应...•使用 POSTman 来测试我们编写的 API 相信通过本篇教程的学习,你对使用 Node 和 Express 编写 API 后端服务器有了一个基本的了解,现在我们了解了 Vue 基础知识,了解了如何搭建后端服务器

    3.1K10

    十分钟实现短链接服务(Node + Express + MongoDB)

    便于保存和传播;3. 某些网站内容发布有字数限制,短链接可以节约字数。...短链接实现的原理非常简单,可以概括为: 为每个原链接生成不重复的唯一短链接 将原链接和对应短链接成对保存到数据库 访问短链接时,web服务器将目标重定向到对应的原链接 根据以上思路,我们自己也可以分分钟实现一个短链接生成服务...定义数据库模型 我们需要将原链接和对应短链接保存到数据库,简单起见,我们只需要保存一个短链接编码,相应的短链接可以使用base url和编码拼接而成。...借助于 shortId,我们可以很方便的生成一个不重复的唯一编码。...} } catch (error) { res.status(500).json("Server error"); } }); module.exports = router; 测试一下

    2.7K20

    持久化储存(二)

    命令行操作 基本测试指令 // helloworld.js // 查询所有数db据库 show dbs // 切换/创建数据库,当创建一个集合(table)的时候会自动创建当前数据库 use test...也需要一个odm工具来方便更好的操作。而mongoose就是i 一个良好的工具。 mongoose一个优雅的nodejs对象文档模型。它是由关系型数据库的思想去应用到非关系型数据库。...BlogModel.findOne({author:'dangjingtao'}); console.log("blog留言数:", r.commentsCount); 快速开发工具:keystone 前端定义了一个数据模型...Keystone是以Express和MongoDB和mongoose为基础搭建的开源的Node.js CMS和web应用程序平台。...之所以出此狂言,背后还是有料的,Keystone自带以下功能: 内置Express.js和MongoDB 动态路由 实用的数据库域类型 自动生成管理员界面 基于数据模型的表单处理 会话管理和认证功能 keystone

    13.3K50

    使用node+express+mongodb实现用户注册、登录和验证功能

    mongoose,并在根目录创建server.js文件和models文件, 在server.js文件中 const express = require('express'); const app =...,express-auth这个就是你数据库的名字,27017是你数据库的端口号,mongodb不需要打开数据库可视化工具,根据名字就自动创建这个数据库名了 const mongoose = require...('mongoose') // 链接数据库 mongoose.connect('mongodb://localhost:27017/express-auth',{ useCreateIndex:...注册功能 首先建立模型,在models.js建立对应的模型,这里因为是登录和注册,就写两个字段就行,如果需要,可以自行添加对应的字段名,unique表示用户名是唯一的,不让重复添加 const UserSchema...应该是用户填写密码,保存数据库的时候,应该是一段乱文,服务端看不懂的一段密码。这里就需要用到对密码加密处理,以前经常用的是md5,现在最常用的是bcryptjs加密方式。 ?

    3.1K20

    Node.js 搭建一个 API 接口服务(实战)

    作者@T谷子 | 地址@https://juejin.im/post/5eb3e1b4e51d45244e7c2d09 前言 因为最近打算自己搭建一个自己的博客系统,用来记录日常的学习和提升一下写作水平...Koa koa是Express的原班人马打造的一个新的框架。相对于express来说koa更小,更有表现力更加健壮。...关于洋葱模型,大概归纳起来就是两点 context的保存和传递 中间件的管理和next的实现 ? (图片来源于网络) ?...上面两张图很清晰的展示了洋葱模型的工作流程,当然,具体的原理实现的话本篇无关,就不在深入描述了,有兴趣的同学可以自己到网上搜一下哈。...,调用方传什么就保存什么 埋点行为对用户来说是无感知的,所以设计反馈信息,如果埋点出错也是由内部处理 好了,了解这个埋点的功能之后,就开始来实现这个简单的接口了: // route.ts 定义一个addAccLog

    8.1K31

    Nodejs和Mongodb的连接器Mongoose

    Mongoose是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDB nodejs驱动,可以在异步的环境下执行。...安装 引用 前面我们已经认识了Mongoose,也了解了MongoDB,回顾一下:MongoDB是一个对象数据库,是用来存储数据的;Mongoose是封装了MongoDB操作的一个对象模型库,是用来操作这些数据的...test1集合,然后在保存数据。...如果你想对某个集合有所作为,那就交给Model模型来处理吧,创建一个Model模型,我们需要指定:1.集合名称,2.集合的Schema结构对象,满足这两个条件,我们就会拥有一个操作数据库的金钥匙。...创建集合 基于前面的内容,接下来我们就开始学习对数据的具体操作了,下面是关于一些基础数据的定义,相信对于你来说已经陌生了,请在仔细温习一遍吧!

    5.9K41

    初试MongoDB学习之Mongoose的使用

    mongoose简介 mongoose官网:https://mongoosejs.com/ #为什么要用Mongoose Mongoose就是一个让我们可以通过Node来操作MongoDB的一个模块。...Mongoose本质是一个对象文档模型(ODM)库, 他对Node原生的MongoDB模块进行了一部优化封装,并且提供了更多的功能。...#Mongoose的优势 可以像操作对象一样操作数据库 可以为文档创建一个模式结构(Schema) 可以对模型中的文档/文档进行验证 数据可以通过类型转换为对象模型 可以使用中间件来应用业务逻辑挂钩 比...mongoose中任何任何事物都是从Schema开始的。每一个Schema对应MongoDB中的一个集合(collection)。Schema中定义了集合中文档(document)的样式。...已经存在,则会保存到其目录下,如果未存在,则会创建person集合,然后在保存数据。

    5.9K20

    mongoDB入门教程五:搭建一个简单的登陆注册界面

    二:项目创建及其运行 1:初始化一个项目 进入D盘,使用命令,开始创建一个项目 d: express loginproject -e 项目创建成功 我们可以看见D盘多了一个刚刚的项目文件夹 2:执行提示命令...3:新建一个models文件夹,在该文件夹下新建user.js并且写好代码 var mongoose = require("mongoose"); // 顶会议用户组件 var Schema = mongoose.Schema...; // 创建模型 var userScheMa = new Schema({ userid: String, password: String }); // 定义了一个新的模型...,但是此模式还未和users集合有关联 exports.user = mongoose.model('users', userScheMa); // users集合关联 4::在routes目下的index.js...配置路由: var express = require('express'); var router = express.Router(); var mongoose = require('mongoose

    1.9K40

    48、mongoose入门

    2、什么是mongooseMongoose是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDB nodejs驱动,可以在异步的环境下执行。...同时它也是针对MongoDB操作的一个对象模型库,封装了MongoDB对文档的的一些增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单。...var kittySchema = new mongoose.Schema({ name: String }); (2)现在我们拥有一个name属性为string类型的Schema,下一步用它构造生成一个模型...) silence.speak(); // My name is Silence 8、保存到数据库 ok,现在我们看到的这只猫又有名字又会说话了,接下来就是把它保存到MongoDB数据库中; save...方法用于保存document到数据库,第一个参数err用于检测回调函数是否报错。

    2K31
    领券