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

不容错过的 Node.js 项目架构

通过使用依赖项注入和这些组织模式,单元测试变得非常简单。 你不必模拟 req/res 对象或 require(...) 调用。...您不应该依赖 Node.js setTimeout 或其他延迟代码执行的原始方法,而应该依赖于一个将您的 Jobs 及其执行持久化到数据库的框架。...我从 W3Tech 的微框架采用这种模式,但并不依赖于它们的包装。 这个想法是将 Node.js 的启动过程拆分为可测试的模块。...这是一种有效的处理方法。 const loaders = require('....不要将您的业务逻辑放入 Express.js 控制器。 使用 Pub/Sub 模式并为后台任务触发事件。 进行依赖注入,让您高枕无忧。 切勿泄漏您的密码、机密和 API 密钥,请使用配置管理器。

5.8K30
您找到你想要的搜索结果了吗?
是的
没有找到

Mongoose 插件记录Node.js API日志

这些模块可以将日志存储在不同格式或级别的文件。我们将使用流行的ORM Mongoose 讨论 Node.js Express 程序的 API 日志记录。...那么如何创建一个 Mongoose 插件,以更清洁的方式为你进行记录并简化 API 日志? Mongoose 的插件是什么? 在 Mongoose 模式是可插入的。...插件就像一个函数,你可以在模式中使用它,并在模式实例上一次次地重用。 Mongoose 还提供全局插件,你可以将其用于所有模式。..._original = doc.toObject({transform: false}) Mongoose Model 继承自 document,它有一个 toObject() 方法。...步骤4:用法 - 如何在express.js API中使用 在你的主server.js或app.js: 初始化全局 plugin 【https://mongoosejs.com/docs/plugins.html

2.7K40

Node.js 开发者需要知道的 13 个常用库

它提供了一种方式,让开发者可以更加高效地使用JavaScript的“异步”或接受回调的方法。...Async模块的功能和优势 超过70种实用方法:Async提供了超过70种实用方法,这些方法大大简化了异步控制流的开发。...兼容主流测试框架:Puppeteer与众多知名的测试框架(Jest和Mocha)兼容,使得集成和使用更为方便。...Puppeteer的应用场景 比如在进行前端测试时,你需要模拟用户的操作来测试网页的响应。Puppeteer可以自动完成这些操作,页面导航、元素点击、表单提交等。...它帮助开发者维护应用的环境变量,保护关键的配置数据,API密钥、登录凭证等。Dotenv遵循十二因素应用方法论,有效地管理环境变量。

48221

【GraphQL】225-GraphQL真香入门教程

"doSomething": "I'm IronMan, I'm watching TV now" } } } 五、GraphQL客户端 这一节我们学习如何在客户端访问...然后模拟创建一个本地数据库 localDb, 用于模拟存放添加的超级英雄数据: const localDb = {} 接下来声明 root 实现 schema 的字段方法: const root =...省略其他 这里的权限判断,只是简单模拟,实际开发,更多的是和后端进行 token 交换来判断权限(或者其他形式)。...八、ConstructingTypes 在前面的介绍,我们要创建一个 schema 都是使用 buildSchema 方法来定义,但我们也可以使用另外一种定义方式。...定义query(查询) 定义查询的时候,跟之前类似,可以参照下面对比图理解,这里比较不同的是,多了个 resolve 的方法,这个方法是用来执行处理查询的逻辑,其实就是之前的 root 方法

8.1K21

那些年错过的React组件单元测试(上)

我们发现有以下几种模式: f: 只会测试之前没有通过的测试用例 o: 只会测试关联的并且改变的文件(需要使用 git)(jest --watch 可以直接进入该模式) p: 测试文件名包含输入的名称的测试用例...t: 测试用例的名称包含输入的名称的测试用例 a: 运行全部测试用例 在测试过程,你可以切换适合的模式。...但这里我们思考一种场景:如果使用done来测试回调函数(包含定时器场景,setTimeout),由于定时器我们设置了 一定的延时( 3s)后执行,等待 3s 后会发现测试通过了。...Mock 介绍jest的mock之前,我们先来思考一个问题:为什么要使用mock函数? 在项目中,一个模块的方法内常常会去调用另外一个模块的方法。...这种方式就不用去模拟axios,而是直接走的本地的模拟方法,也是比较常用的一种方式,这里就不展开说明了。

4.9K20

GraphQL真香入门教程

"doSomething": "I'm IronMan, I'm watching TV now" } } } 五、GraphQL客户端 这一节我们学习如何在客户端访问...然后模拟创建一个本地数据库 localDb, 用于模拟存放添加的超级英雄数据: const localDb = {} 接下来声明 root 实现 schema 的字段方法: const root =...省略其他 这里的权限判断,只是简单模拟,实际开发,更多的是和后端进行 token 交换来判断权限(或者其他形式)。...八、ConstructingTypes 在前面的介绍,我们要创建一个 schema 都是使用 buildSchema 方法来定义,但我们也可以使用另外一种定义方式。...定义query(查询) 定义查询的时候,跟之前类似,可以参照下面对比图理解,这里比较不同的是,多了个 resolve 的方法,这个方法是用来执行处理查询的逻辑,其实就是之前的 root 方法

7K30

Mongoose 实现关联查询和踩坑记录

本文源自工作的一个问题,在使用 Mongoose 做关联查询时发现使用 populate() 方法不能直接关联非 _id 之外的其它字段,在网上搜索时这块的解决方案也并不是很多,在经过一番查阅、测试之后...图片来源:mongoing[1] 引用模型示例 JSON 模型 我们通过作者和书籍的关系,一个作者对应多个书籍这样一个简单的示例来学习如何在 MongoDB 实现关联非 _id 查询。...Virtual 和 populate 实现 Mongoose 的 populate 方法默认情况下是指向的要关联的集合的 _id 字段,并且在 populate 方法里无法更改的,但是在 Mongoose...可以在创建 Schema 时在第二个参数 options 设置,也可以使用创建的 Schema 对象的 set 方法设置。...另外一种是 Mongoose 提供的 populate 方法,这种方式写起来,代码会更简洁些,这里需要注意如果关联的字段是非 _id 字段,一定要在 Schema 设置虚拟值填充,否则 populate

26.3K20

JavaScript 测试教程 part 1:用 Jest 进行单元测试

本文是 JavaScript 测试教程 系列的第1部分 1. JavaScript测试教程-part 1:用 Jest 进行单元测试 2....多亏了他,你可以用一种方法来确保你的代码在整体上能够正常运行。 端到端测试(E2E) 与其他类型的测试相反,端到端测试始终在浏览器(或类似浏览器)环境运行。...E2E 测试的重点是在我们正在运行的程序模拟实际用户。他们将模拟滚动,单击和键入之类的行为,并从实际用户的角度检查我们的程序是否运行良好。...1npm install --save-dev jest 别忘了把它添加到 npm 脚本。...稍后我们将学习如何在 React 中使用 Jest 首先,让我们创建一些可以测试的简单函数。

2.8K20

【译】73个超棒且可提高生产力的 NPM 包

数据库工具 19.Mongoose[40] Mongoose 是一个 MongoDB 对象建模工具,设计用于在异步环境工作。Mongoose 支持 Promise 和回调。...日期格式化 35.DayJS[56] DayJS 是 MomentJS[57] (自2020年9月起处于维护模式)的一种快速、轻巧的替代方案。...测试 45.Jest[68] Jest 是一个令人愉快的 JavaScript 测试框架,专注于简洁明快。它允许你使用易于使用、熟悉且功能丰富的 API 编写测试,从而快速获得结果。...CLI 和调试工具 58.Commander[81] 提供一个连贯的 API,用于定义 CLI 应用程序的各个方面,命令、选项、别名和帮助。简化了命令行应用程序的创建。...系统模块 65.Fs-extra[88] fs -extra 包含了 Node.js fs 包没有包含的方法,比如 copy(), remove(), mkdirs() 66.Node-dir[89]

5.9K30

前端自动化测试实践03—jest异步处理&mock

api').then(res => res.data) // '(function(){return 123})()' } 除了上述方法指定 mock 函数和返回结果,还可以使用 mock 文件替换对应方法...,让异步变同步,需要在 __mocks__ 文件夹下建立同名文件, __mocks__/mock.js export const fetchData = () => { return new...{ resolved('(function(){return 123})()') }) } 测试用例,对于在 mock.js 但不在 __mocks__/mock.js 方法则不会被覆盖.../es6-class') jest.mock 如果发现是一个类,会自动把构造函数和方法变成 jest.fn() 以提升性能,相当于执行了 const Util = jest.fn() Util.a =...() // 执行2次 【2】只运行队列的timer jest.runOnlyPendingTimers() // 执行1次 【3】快进x jest.advanceTimersByTime(3000)

5.1K85

Jest单元测试之旅—实践总结

每个方法都有不同的使用场景,每个API都会生成一个mock模拟函数,Jest模拟函数提供了很多方法给予我们模拟方法的返回、实现等等,可移至文档参考 jest.fn jest.fn主要是创建一个模拟函数...这意味着模块模拟不会包装原始模块,它会完全替换require系统的原始模块。因此,mockRestore可以在模拟模块模拟函数上定义,但是调用它不会恢复原始实现。...这里分别使用了jest.spyOn和jest.Mock两个方式对同一个方法进行3种不同编写方式的测试,在实际情况我们应该选择合适的方法。...模拟部分函数,这里使用了jest.requireActual,该方法主要是绕过模拟模块导出真实模块,然后通过jest.mock的工厂函数重新去定义该模拟模块的内容,这种方式就可以指定导出的模块具体哪些方法需要被模拟...在类我们可以使用private对方法进行私有化,此时我们在单测时没办法直接访问或者模拟。需要通过对私有成员使用数组访问或者通过prototype属性进行模拟

10.2K20

干货 | 携程租车React Native单元测试实践

1.2 Enzyme Enzyme是AirBnb开源的React测试工具库,通过一套简洁的api,可以渲染一个或多个组件,查找元素,模拟元素交互(点击,触摸),通过和Jest相互配合可以提供完整的...比如之前提到的初始化文件jest.setup.js,我们会mock一些对象: jest.useFakeTimers(); //mock时间 jest.mock('....文件下建立需要mock的组件的文件,建立InteractionManager.js。...七、Jest 异步测试 Jest单元测试是同步的,因此面对异步操作fetch获取数据,需要进行异步的模拟测试。...在携程租车前端单元测试的实践,我们总结出几个要点: 将待测试的组件当成黑盒,不用考虑内部逻辑实现; UI改动频繁,优先保证公用组件,工具函数,核心代码的单元测试; 模拟数据尽量真实; 多考虑边界条件情况

5.9K30

提高代码质量——使用Jest和Sinon给已有的代码添加单元测试

Sinon.js是一个用来做独立测试和模拟的JavaScript库。它在单元测试的编写通常用来模拟HTTP等相关请求。...它能满足日常的普通需求utils工具集的测试,也能够配置Sinon.js来进行HTTP模拟测试。...而在Jest,可以很方便的通过一些简单配置,就能够识别在文件中使用的webpack alias,相关的具体方法将会在后面章节进行具体描述。...而对于其他的测试框架:Mocha或者Chai等,没有进行具体的了解,因此在这里不多做评价。 如何配置Jest与Sinon.js,从而编写单元测试?...关于Jest是如何测试JavaScript代码以及Sinon是如何模拟XMLHttpRequest请求的,我们将会在后面几篇博客给大家带来相关的源码解析,有兴趣的同学可以关注我,留意后续的文章。

3.7K00

Jest基本使用方法以及mock技巧介绍

:可以修改或监查某个函数的行为; 手动模拟:测试代码时可以忽略模块的依存关系; 虚拟计时:帮助控制时间推移。...此函数可以简单使用下面方法mock,并且jest提供一些方法可以确保查看mock函数被调用的情况: ?...2.2.2  jest.mock()直接在单元测试里面mock 模块 例如我们很多产品代码里面会使用fs文件读取文件, 在单元测试, 我们并不需要真去调用fs读取文件, 就可以考虑把fs模块mock掉...注意:用这种方式, 需要在单元测试文件需添加下面的代码才能使此mock生效。 ?...注意:如果我们需要mock node的核心模块(fs或者path),那么还是需要显示的调用jest.mock('path') , 因为核心的node模块默然是不被mock的。

8.2K50
领券