在 mocha 中的每个测试文件之前运行一组操作

2023-12-19

我最近开始使用 mocha 来测试我的expressjs 服务器。 我的测试分为多个文件,其中大多数包含一些重复的段(主要是在将所有装置加载到数据库的语句之前等),这真的很烦人。

我想我可以将它们全部导出到一个文件中,并在每个测试中导入它们,但我想知道是否有一些更优雅的解决方案 - 例如运行包含所有设置命令的某个文件,以及包含所有设置命令的另一个文件拆卸命令。

如果有人知道答案那就太棒了:)


摩卡测试的常见功能分解分为三个基本级别。如果您想为一堆测试加载一次某些装置(并且您已将每个测试编写为独立的),请使用before函数加载文件顶部的装置。您还可以使用beforeEach如果您需要每次重新初始化灯具,请使用此函数。

第二个选项(相关)是将通用功能提取到一个单独的文件或一组文件中,并需要该文件。

最后,请注意摩卡有一个根级钩子 https://mochajs.org/#root-level-hooks:

您还可以选择任何文件并添加“根”级挂钩。例如,在所有describe() 块之外添加beforeEach()。这将导致对 beforeEach() 的回调在任何测试用例之前运行,无论它位于哪个文件中(这是因为 Mocha 有一个隐含的 describe() 块,称为“根套件”)。

我们用它来启动一个 Express 服务器一次(并且我们使用一个环境变量,以便它在与我们的开发服务器不同的端口上运行):

before(function () {
  process.env.NODE_ENV = 'test';
  require('../../app.js');
});

(我们不需要done()这里因为 require 是同步的。)这是,无论有多少不同的测试文件包含此根级别,服务器都会启动一次before功能。

以这种方式拆分的好处是我们可以运行npm test它运行所有测试,或在任何特定文件或任何特定文件夹上运行 mocha,或任何特定测试或一组测试(使用 it.only 和 describe.only),并且将运行所选测试的所有先决条件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 mocha 中的每个测试文件之前运行一组操作 的相关文章

  • 在 ExpressJS 中通过管道传送远程文件

    我想读取远程图像并显示它 我可以保存文件 但无法正确显示代码 理想情况下 我只想直接传递文件而不进行处理 不确定是否需要 tmp 文件步骤 此代码不显示任何内容 没有错误 我也尝试了 res pipe response var url ht
  • NodeJS 内存增长 - (系统)内存泄漏?

    我在我们的生活环境中遇到了奇怪的内存泄漏 其中 system 堆中的对象不断增长 堆转储 Here is a memory dump where the memory usage grew to 800MB 请注意 该内存保留在Genera
  • mocha——手表和猫鼬模型

    如果我让 mocha 监视更改 每次保存文件时 mongoose 都会抛出以下错误 OverwriteModelError 无法覆盖Client模型一旦编译 我知道猫鼬不允许两次定义模型 但我不知道如何让它与mocha watch clie
  • 如何使用expressjs发送多个文件?

    我希望能够发送许多文件 如果可能的话 发送整个目录 以便我可以在从 html 文件调用的其他 js 文件中访问它 const app require express const http require http Server app co
  • Express.js - 监听关闭

    我有一个使用 Express 的 Node js 应用程序 在该应用程序中 我有一个如下所示的块 const app require app const port process env PORT 8080 const server app
  • mongoDB白名单IP

    我看到类似的帖子 但没有一个能帮助我解决我的问题 在学习了从头开始构建 MERN 应用程序的 Udemy 教程后 我陷入了 mongoose 连接的困境 这是我的 index js 代码 const express require expr
  • 在使用 supertest 和 Node.js 的测试中,res.body 为空

    我正在测试 Node js API超级测试 https github com visionmedia supertest 我无法解释为什么res body对象超集返回为空 数据显示在res text对象 但不是res body 知道如何解决
  • 错误:模块“html”不提供视图引擎(Express)

    我正在尝试设置一个简单的路由应用程序 但在渲染页面时不断遇到错误 Error Module html does not provide a view engine 奇怪的是我已经在 app js 文件中指定了视图引擎 但仍然收到错误 app
  • 以异步方式执行 Express res.render

    我有一个 Nodejs 应用程序 其中res renderExpress 方法以阻塞方式花费大约 400 毫秒 我如何处理它以非阻塞方式执行 我的 apache 基准测试需要 12 秒来执行大约 30 个并发请求 我如何以更好的方式实施这一
  • Node.js Express 4.0 中的 res.render 回调参数的用途是什么?

    目的是什么res render回调参数 在什么情况下 由于模板已被指定为第一个参数 因此人们会想要使用这样的回调参数 这是文档中的代码 send the rendered view to the client res render inde
  • Node.js 未处理的“错误”事件

    我编写了一个简单的代码并将其保存在文件 try js 中 var http require http var makeRequest function message var options host localhost port 8080
  • Chai:是否期待错误取决于参数[重复]

    这个问题在这里已经有答案了 我一直在尝试编写一个处理错误的函数文本 如果它是有效错误 则抛出该错误 但如果不是 则不会抛出任何内容 问题是我在使用时似乎无法设置参数 expect handleError to throw Error 理想的
  • 如何使用 sinon/mocha 模拟 npm 模块

    我正在尝试测试调用该模块的函数cors 我想测试一下cors会被称为 为此 我必须存根 模拟它 这是函数 cors js const cors require cors const setCors gt cors origin http l
  • 使用 React.js + Express.js 发送电子邮件

    我在 ES6 中使用 React js 构建了一个 Web 应用程序 我目前想要创建一个基本的 联系我们 页面并想要发送电子邮件 我是 React 新手 刚刚发现我实际上无法使用 React 本身发送电子邮件 我正在遵循教程nodemail
  • 如何在超级测试中模拟中间件?

    我想测试中间件是否在app js叫做 虽然我嘲笑该模块work js 它仍然运行原始代码 app js const work require work const express require require const app expr
  • Nodejs Express中间件函数返回值

    我正在使用 NodeJS 和 Express 我有以下路线 中间件功能是Mobile 如果我不使用 return next 在 isMobile 函数中 应用程序会卡住 因为 NodeJS 不会移至下一个函数 但我需要 isMobile 函
  • 打字稿:“找不到模块”且输入有效

    我刚刚使用 typescript 启动了一个新的 Nodejs 项目 我安装了打字 https github com typings typings https github com typings typings 并使用它来安装 Node
  • Express.js Passport认证自动失败跳过策略

    UPDATE 我已将代码从护照本地注册内部移至单独的处理程序 并且运行良好 问题在于 Passport 和本地注册的使用 但我不知道为什么 我使用 Node js Express Passport 进行身份验证和注册设置 这是以前使用过的标
  • 将nodejs Express静态请求重定向到https

    我需要将所有 http 请求重定向到 https 包括对静态文件的请求 My code app use express static dirname public app get function req res if req secure
  • 节点应用程序之间共享会话?

    我目前有两个独立的节点应用程序在两个不同的端口上运行 但共享相同的后端数据存储 我需要在两个应用程序之间共享用户会话 以便当用户通过一个应用程序登录时 他们的会话可用 并且他们似乎已登录到另一个应用程序 在本例中 它是一个面向公众的网站和一

随机推荐