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

为什么在sequelize上supertest请求之前done运行得更早?

在sequelize上,supertest请求之前的done函数运行得更早的原因是因为supertest请求是异步的,而done函数是同步的。

在Node.js中,异步操作是通过回调函数来处理的。当我们使用supertest发送请求时,它会立即返回一个Promise对象,然后继续执行后面的代码。而done函数是在supertest请求的回调函数中调用的,当请求完成后才会执行。

由于异步操作的特性,supertest请求的回调函数会在done函数之前执行。这意味着在done函数中的代码会在supertest请求的回调函数之后执行。

为了解决这个问题,我们可以使用async/await或者Promise来处理异步操作。通过使用async/await,我们可以将异步代码转换为同步的形式,确保done函数在supertest请求之后执行。例如:

代码语言:txt
复制
it('should do something', async () => {
  await request(app)
    .get('/api/something')
    .expect(200);

  // 在请求完成后执行的代码
  done();
});

在上面的代码中,我们使用了async/await来等待supertest请求完成,然后再执行done函数。

总结:在sequelize上,supertest请求之前的done函数运行得更早是因为supertest请求是异步的,而done函数是同步的。为了确保done函数在请求完成后执行,我们可以使用async/await或者Promise来处理异步操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

3-2 回顾数据结构设计 对第一周内容做了个简单回顾 3-3 Mysql 和 Sequelize 1 学习这节之前,先将代码clone到本地,代码地址:https://github.com/liugezhou...如图显示这个版本是5.0.8的,也就是说我之前电脑其实是有redis的,我新安装的这个6.0.9的并没有用上。...此时第三章3-3 clone的代码基础,加入了redis配置后,执行npm run dev 发现redis连接成功了!...6-1 pm2和nginx-章开始 线上服务:稳定和高效 6-2 pm2配置和使用 根据我之前的学习理解:pm2其实就是一个后台服务常驻的一个工具,我们平时npm run dev后如果按Ctrl...关于表的外键:表关联,有一些外键的设置,我发现之前的后端表中都没有对外键盘做一个级联操作,于是回头查看一些表结构的时候,就不容易看出来一些表的关联关系,如果我们新建表的时候就去设置外键表的关联,

2K30

使用mocha编写node服务单元测试

it方法的第二个入参是一个执行函数,我们可以给这个函数传入一个done方法,等到异步返回后再去显示地调用done方法,告诉mocha该测试用例执行完毕。...我们常常使用它来替换掉测试困难的代码部分,例如数据库操作、网络请求等。...}) afterEach(function() { // 本组每个测试用例结束后会执行 }) }) superTest 回到我们的文章主题上来,如果我们想要从请求开始来测试node...superTest可以帮助我们去请求本地 koa 或者 express这类web框架所编写的路由接口,而且对接口返回的状态码、数据等进行断言校验。...assert(response.body.name == 'john', '返回数据错误') }) }); }); 总结 mocha本身是一个比较简单的测试框架,在此基础

3.9K20

十个书写Node.js REST API的最佳实践(下)

译者注:mock 和 stub 都是测试的方法 有个可以帮你进行Node.js REST API进行黑盒测试的模块叫做supertest。...Accept', 'application/json') .expect(200, { id: '1', name: 'John Math' }, done...因此基于你的需要,你可以使用下面的任何一种方法来把数据库用测试数据填充: 已知产品数据集运行你的黑盒测试方案 测试用例运行之前使用构造的数据填充数据库 当然,黑盒测试并不意味着你不需要做单元测试,...这些头会试着检查存储服务器资源的版本是否和同样资源的给定版本一致。...但是我们为什么还需要它们呢? 看看下面这个RESTful资源请求: /org/1/space/2/docs/1/collaborators?

2.3K00

你确定你的 REST API 真的符合 REST 规范?

例如,对于移动应用程序中使用的实际 api,原子资源的使用是次优的。再如,完全拒绝请求之间的数据存储实质禁止了随处可见的“用户会话”机制。 不过,我想说,也没你想的那么糟糕!...每个测试中,模拟一个真实的 HTTP 请求并验证服务器的响应。例如, Node.js 的单元测试中,用于模拟请求的有 supertest 和 chai-http包。...做之前,你首先需要生成 OpenAPI,请执行如下命令: tinyspec -j -o openapi.json 接着,你可以项目中使用生成的 JSON 并从中获取定义键。...构建请求,并返回与上述规范完全对应的序列化对象: import Router from 'koa-router'; import serialize from 'sequelize-serialize...GitHub发布 发布文档的最简单方法之一是GitHub Page。只需存储库设置中为 /docs 文件夹启用对静态页面的支持,并将 HTML 文档存储在此文件夹中即可。

25820

造一个 supertest 轮子

前言 supertest 是一个短小精悍的接口测试工具,比如一个登录接口的测试用例如下: import request from 'supertest' it('登录成功', () => { request...今天就带大家一起实现一个 supertest 的轮子吧,做一个测试框架! 思路 写代码前,先根据上面的经典例子设计好整个框架。...新创建的对象里添加这些 restful 函数,并通过传入对应的 path, method 和 url 创建 Test 对象,然后间接创建一个 http 请求,以此完成 “发送请求” 这一步。...虽然这系列的文章标题都是以 “造轮子” 为开头,但本质是带大家一步一步地阅读源码。...希望这样可以由浅入深地带大家看一遍源码,同时又不会有太大的心理负担 :) 为什么只写 10 篇呢?一个原因是想尝试一下别的领域了和看看书了。

68620

第二十九课 如何实现MetaMask签名授权后DAPP一键登录功能?

当然,由于这是一个未经身份验证的API调用,因此后端应配置为仅显示此路由的公共信息包括nonce。 如果先前的请求未返回任何结果,则表示当前钱包地址尚未注册。...5,为什么登录流程有效 根据定义,身份验证实际只是帐户所有权的证明。如果您使用钱包地址唯一地标识您的帐户,那么证明您加密方式拥有该帐户就非常简单。...以下是为什么此登录流程优先于电子邮件/密码和社交登录的参数列表: 提高安全性:公钥加密的所有权证明可以说比通过电子邮件/密码或第三方证明所有权更安全,因为MetaMask您的计算机本地存储凭据,而不是在线服务器...桌面浏览器,MetaMask会注入它。但是,移动浏览器没有扩展程序,因此此登录流程无法移动版Safari,Chrome或Firefox开箱即用。...我们还探讨了这种登录机制与传统电子邮件/密码或社交登录相比的权衡,无论是桌面还是移动设备

11.1K52

Express,Sequelize和MySQL的Node.js Rest API示例

本教程中,我将 向您展示如何使用Express,Sequelize和MySQL数据库来构建Node.js Restful CRUD API。 您应该首先在机器安装MySQL。...端口8080侦听传入请求。 现在,使用以下命令运行该应用:node server.js。 使用URL http:// localhost:8080/打开浏览器,您将看到: ?...pool是可选的,它将用于Sequelize连接池配置: - max:池中的最大连接数 - min:池中的最小连接数 - idle:连接释放之前可以空闲的最长时间(以毫秒为单位) - acquire:该池将在抛出错误之前尝试获取连接的最长时间...我们还需要在server.js中包含路由(app.listen()之前): ... require("....找到此示例的完整源代码。

12.6K30

构建、更改和自动化管理基础架构的高效工具 | 开源日报 0831

执行计划:Terraform “规划” 步骤中生成执行计划。执行计划显示了当调用 apply 时 Terraform 将要做什么操作,这让您避免修改基础架构时出现意外情况。...因此,Terraform 尽可能有效地构建基础架构,并为维人员提供对其依赖关系的洞察力。 变更自动化:可通过最小限度人机交互把复杂变更集应用到您的基础结构。...sequelize/sequelize[2] Stars: 28.3k License: MIT Sequelize 是一个易于使用的基于 Promise 的 Node.js ORM 工具,适用于...gzhttp:提供客户端和服务器封装以有效处理 gzipped 请求。 pgzip:是一个单独分离出来的可以快速并行执行 GZIP 操作 (即多线程)的工具。...它免费、专为离线使用而设计,保护患者隐私,并且可在 iOS、Android 和 Web 使用。

16010

基于 Egg.js 框架的 Node.js 服务构建之用户管理设计

之前学习过一段时间 Egg.js,这次毫不犹豫的选择了基于 Egg.js 框架来搭建。 为什么是 Egg.js ?...,设计缺乏对 Model 的管理,看到资料说可以引入 ORM 框架,比如 sequelize,而 Egg 官方恰好提供了 egg-sequelize 插件。...)的唯一性。...载荷(Payload) 说白了就是我们需要包含的数据,类似于网络请求请求体 body,例如: { "iss": "zhaomenghaun", "sub": "*@agree.com.cn",...后记 本文原本是想通过用户管理的设计来说明构建 Node.js 服务过程遇到的问题以及收获,太久没有写文章,思维一时无法发散,只能平铺直叙设计过程用到的插件的基本用法和一些设计的思考,发出来不求能够助人

9.3K40

GraphQL测试实践

GraphQL是强类型的,通过它,可以执行之前验证 GraphQL 类型系统中的查询, 它帮助我们构建更强大的 API。...但从请求URL我们无法辨别GraphQL到底干了什么,我需要进一步的观察请求的body REST api 请求POST带的请求的数据。同样GraphQL它也是发送的POST请求,也是带的数据。...我们知道具体请求的Query内容,有的内容很长,难道让我们一个一个字全打到Postman? ?...这里有一个小技巧,鼠标右键chrome dev tools 具体请求上点击,然后选择copy 选择copy as curl 这样就能简单复杂这条请求。...传统我们测试RESTful时,大部分人可能选择的mocha chai supertest 这个库作为测试框架 来编写API测试,通过上面的文章,我们了解到GraphQL 请求的底层依然还是http request

2K30

Nest.js 从零到壹系列(二):数据库的连接

前言 一篇介绍了如何创建项目、路由的访问以及如何创建模块,这篇来讲讲数据库的连接与使用。 既然是后端项目,当然要能连上数据库,否则还不如直接写静态页面。...mysql2 -S 然后 src 目录下创建文件夹 database,然后再创建 sequelize.ts: // src/database/sequelize.ts import { Sequelize...这说明之前的配置生效了,我们试着用之前的参数请求一下接口: ? 返回“查无此人”,说明数据库没有叫“Kid”的用户。 我们改成正确的已存在的用户名再试试: ?...但笔者通过观察 logging 打印出来的语句发现,其实多了很多无谓的操作,高并发的情况下,太影响性能了。...而使用原生 SQL,只需要学一种语言就够了,换个工具,也能用,而且就算改了字段,也只会在请求接口的时候报错,到时候再针对那个语句修改就好了,而且现在查找替换功能这么强大,批量修改也不是难事。

3.9K33

Nest.js 从零到壹系列(三):使用 JWT 实现单点登录

前言 一篇介绍了如何使用 Sequelize 连接 MySQL,接下来,原来代码的基础上进行扩展,实现用户的注册和登录功能。...,之后的请求中都带上 Token ; 服务端接收到带 Token 的请求后,直接根据签证进行校验,无需再查询用户信息; 下面,就开始我们的实战: GitHub 项目地址[2],欢迎各位大佬 Star。...二、用户注册 写注册逻辑之前,我们需要先修改一下一篇写过的代码,即 user.service.ts 中的 findeOne() 方法: // src/logical/user/user.service.ts...from 'sequelize'; // 引入 Sequelize 库 import sequelize from '../.....我们拿之前的注册接口测试一下,修改 user.controller.ts 的代码,引入 UseGuards 和 AuthGuard,并在路由添加 @UseGuards(AuthGuard('jwt')

5.2K61

RestQL:现代化的 API 开发方式

现代的业务系统中,后端开发工作基本可以被拆分为三项: 接口鉴权。例如判断是不是当前系统的用户,以及该用户是否有权限访问接口。 与其他系统的交互。例如调用第三方的服务,或内部搭建的其他服务。...如果说我看得比别人远,那是因为我站在巨人的肩膀。 所以我们现有的技术基础再抽象,把已有的东西重新组合起来,拼装成一个新的工具,帮助工程师从「体力活」中解脱出来,解放生产力。...调用方式 如何请求 为了解释「如何请求」,我们先从一些公认的规则出发,举一个例子,然后再从例子中抽象出一些规则。...最终我们「把能实现的路由,全部实现」的原则基础,开发了 RestQL 的 koa 版本。...通过 restql 参数 使用sequelize定义关联时,我们可以设定restql参数,实现访问控制。

1.6K50

万字长文之 Serverless 实战详细指南

API 网关触发, 就是有请求过来时, 才触发这个函数. 这里我们选择 API 网关触发, 也就是有请求过来时, 才触发这个函数. 保存后, 我们就能看到云函数的访问路径了: ?...腾讯云 MySQL 数据库设计 因为是一个简易的博客系统, 不涉及登录和评论, 满足数据库设计第三范式的基础, 我们只需要设计一张表即可, 即博客表本身: 字段名 字段类型 id 主键 title...但这还是不优雅, 要获取路径, 再写一堆 if else 来做路由, 不是很好维护, 而且如果要扩展, 还得增加 get, post 等请求的判断, 再加上路径的参数也要手工写函数来获取....来看看 db 的实现 /model/db.js const Sequelize = require('sequelize'); const sequelize = new Sequelize('blog...整个过程都很轻量, 没有太多涉及服务端维的内容. Serverless 的兴起, 会给我们的开发带来很大的便利.

1.6K30

使用TS+Sequelize实现更简洁的CRUD

,所以就有了ORM,这里就用到了Node中比较流行的Sequelize。...ORM是干嘛的 首先可能需要解释下ORM是做什么使的,可以简单地理解为,使用面向对象的方式,通过操作对象来实现与数据库之前的交流,完成CRUD的动作。...CRUD终极版 装饰器实现模型定义 Sequelize-typescript是基于Sequelize针对TypeScript所实现的一个增强版本,抛弃了之前繁琐的模型定义,使用装饰器直接达到我们想到的目的...Sequelize-typescript的使用方式 首先因为是用到了TS,所以环境依赖要安装的东西会多一些: # 这里采用ts-node来完成举例 npm i ts-node typescript npm...哈哈,这又是为什么呢?细心的同学可能会发现,getList的返回值是一个Animal[]类型的,所以上边并没有leg属性,Bird的两个属性也是如此。

2.7K20

TypeScriptnode项目中的实践

为什么选择TS 作为巨硬公司出品的一个静态强类型编译型语言,该语言已经出现了几年的时间了,相信社区的维护下,已经是一门很稳定的语言。...环境依赖 使用TS之前,需要先准备这些东西: VS code,同为巨硬公司出品,本身就是TS开发的,遂该编辑器是目前对TS支持度最高的一个 Node.js 推荐8.11版本以上 npm i -g...src下,主要代码分为了如下结构(依据自己项目的实际情况进行增删): # folder desc 1 controllers 用于处理接口请求,原apps、routes文件夹。...如果是特定的一些中间件,则创建一个普通的class即可,然后需要使用的controller对象指定@UseBefore/@UseAfter(可以写在class,也可以写在method)。...建立连接也是需要对应的数据库地址、账户、密码、database等信息、所以推荐将同一个数据库的所有实体放在一个目录下,方便sequelize加载对应的模型 同步的推荐config下创建对应的配置信息,

1.7K20
领券