第一章 周介绍 1-1 本周介绍 服务端选型:所有技术为业务服务 nodejs框架选型:Koa2 数据库:Mysql Mongodb Redis 登录校验:JWT 单元测试与接口测试:Jest...优缺点 优点:不占用服务器内存、多进程,多服务器,不受影响、不受跨域限制 缺点:无法快速封禁登录的用户。...4-5 章总结 Cooike/Session/Jwt/OSS/OAuth2 第五章 单元测试选择 Jest 5-1 开始 保证软件质量:单元测试和接口测试。...Jest 和Mocha 单元测试为何难以落实 supertest接口测试 测试驱动开发TDD 5-2 介绍Jest和Mocha Jest官网:https://jestjs.io/zh-Hans/docs...本地测试: jest + supertest 远程测试: jest + axios 接口测试和单元测试,代码都放在 __test__下,但两者概念要区分开。
2.2 单元测试分类 TDD - (测试驱动开发)侧重点偏向开发,通过测试用例来规范约束开发者编写出质量更高、bug更少的代码 BDD - (行为驱动开发) 由外到内的开发方式,从外部定义业务成果,再深入到能实现这些成果...Jest 运用 Jest 是 Facebook 开源的一款 JS 单元测试框架,它也是 React 目前使用的单元测试框架,目前vue官方也把它当作为单元测试框架官方推荐 。...API,分别是jest.fn()、jest.spyOn()、jest.mock() jest.fn() - 是创建Mock函数最简单的方式,如果没有定义函数内部的实现,jest.fn()会返回undefined...作为返回值,当然你也可以给他设置返回值、定义内部实现或返回Promise对象,如下例: // 断言mockFn执行后返回值为name it('jest.fn()返回值', () => { let...,我们可能要对它进行多次不同的mock,这时候需要在beforeEach使用restoreAllMocks方法重置状态 mock的目的: 设置函数返回值 获取获函数调用情况 改变原本函数的内部实现 4.
,但它们的值是一样的,也是可以的 小结 对于有返回值的function,就是通过判断「返回值」,是否与「期望值」相等即可 这样的好处: ① 当有新需求要扩展该函数时,可以保证该函数的返回值仍保持不变,进而不会影响到使用到该函数的旧需求...② 当测试的函数比较复杂时,非常方便,不用了解内部的详细代码,只需返回值符合期望即可 如何测试ReactComponent 当我写完一个React组件时,我该如何测试它呢?...,也无法与子组件互动 // render()用于将React组件渲染成静态的HTML并分析生成的HTML结构 // 渲染一个react组件 const component =...()建立 mock function // 进行单元测试时,应该将关注点放在「测试目标」上,onChartReady 作为被依赖的function, // 内部发生了什么与「测试目标」无关...() 作用: 新建mock function 在进行单元测试时,应该将关注点放在「测试目标」上,而onChartReady作为被依赖的function,不管它的内部发生了什么,都与「测试目标」无关,只需关注返回的值
导读 Jest是由Facebook开发并维护的一套js的单元测试框架,之前在后台的nodejs项目里面第一次尝试使用,感觉还是非常容易上手的,功能也比较强大。...mock属性的所有api可以参考:https://facebook.github.io/jest/docs/en/mock-function-api.html 2.1.2 Mock返回值 可以使用mock...2.1.3 Mock内部实现 使用jest.fn或者mockImplementationOnce 可以完全替换需要mock的函数。 如下面的例子: ?...当需要mock的函数是从其他模块创建的就可以使用mockImplementation。 ?...2.2.2 jest.mock()直接在单元测试里面mock 模块 例如我们很多产品代码里面会使用fs文件读取文件, 在单元测试中, 我们并不需要真去调用fs读取文件, 就可以考虑把fs模块mock掉
3 模拟的问题 避免依赖 MongoDB 数据库运行测试的一种方法是使用 Jest 所谓的“mock”来模拟该数据库。...在我们的例子中,fetchRankedTracks()函数调用mongodb.tracks.find(),从 mongodb 模块导入。...因此,我们的自动化测试可以设置一个假的内存数据库,将数据查询重定向到它,而不是真的去查询一个实际的 MongoDB 数据库: jest.mock("mongodb.js", { tracks: {...jest.mock("mongodb", { tracks: { find: (queryObj, params) => ({ toArray: () => {...现在,“热门曲目”模型将我们的纯粹的“热门曲目”特性逻辑称为“热门曲目”,我们可以在编写单元测试时,逐步将逻辑从第一个转移到第二个。
nodejs 自带的 assert 模块提供了下面一些断言方法,只能满足一些简单场景的需要。...使用 Jest + Enzyme 对 React 进行单元测试 ?...react-test-renderer 将组件渲染成内存中的对象, 可以方便进行 props, state 等数据方面的测试,对应的操作对象为 ShallowWrapper,在这种模式下仅能感知到第一层自定义子组件,对于自定义子组件内部结构则无法感知...使用 shallow() 能感知到的结构如下, 注意看到 div.text 作为 Living 组件的 children 能够被检测到,但是 Living 的内部结构无法感知。...,整个单元测试技术体系包含了很多东西,本文无法面面俱到,只介绍了一些距离我们最近的相关的技术体系。
无论是在代码的初始搭建过程中,还是之后难以避免的重构和修正bug过程中,常常会陷入逻辑难以梳理、无法掌握全局关联的境地。...mock mock一般指在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法 广义的讲,以上的 spy 和 stub 等,以及一些对模块的模拟,对 ajax 返回值的模拟...React 单元测试中用到的工具 Jest 不同于"传统的"(其实也没出现几年)的 jasmine / Mocha / Chai 等前端测试框架 -- Jest的使用更简单,并且提供了更高的集成度、更丰富的功能...四个基础单词 编写单元测试的语法通常非常简单;对于jest来说,由于其内部使用了 Jasmine 2 来进行测试,故其用例语法与 Jasmine 相同。...是一个会在npm脚本中被调用的普通 JS 文件,而非XXX.json或.XXXrc的形式,所以 nodejs 的各自操作都可以进行,比如引入 fs 进行预处理读写等,灵活性非常高,可以很好的兼容各种项目
同时也没有必要一味追求行覆盖率,因为它会导致我们过分关注组件的内部实现细节,从而导致琐碎的测试。 II....Vue.js 中的单元测试工具 2.1 Jest 不同于"传统的"(其实也没出现几年)的 jasmine / Mocha / Chai 等前端测试框架;Jest的使用更简单(也许就是这个单词的本意“俏皮话...四个基础单词 编写单元测试的语法通常非常简单;对于jest来说,由于其内部使用了 Jasmine 2 来进行测试,故其用例语法与 Jasmine 相同。...3.2 整合到工作流中 写好的单元测试,如果仅仅要靠每次 npm test 手动执行,必然会有日久忘记、逐渐过时,最后甚至无法执行的情况。...一个设计不佳的组件,就会变成无法测试的,进而你就会简单的跳过单元测试,又导致了其保持未测试状态,变成一个恶性循环。
前端为什么需要单元测试? 必要性:JavaScript 缺少类型检查,编译期间无法定位到错误,单元测试可以帮助你测试多种异常情况。 正确性:测试可以验证代码的正确性,在上线前做到心里有底。...Jest 和 Mocha 相比,无论从 github starts & issues 量,npm下载量相比,都有明显优势。...从 github starts & issues 以及 npm 下载量角度来看,Jest 的关注度更高,社区也更活跃 框架对比 框架 断言 异步 代码覆盖率 Mocha 不支持(需要其他库支持) 友好..." }, } 运行 npm run test ,jest 将打印下面这个消息 3.不支持部分 ES6 语法 nodejs 采用的是 CommonJS 的模块化规范,使用 require 引入模块...运行时内部先执行( jest-babel ),检测是否安装 babel-core,然后取 .babelrc 中的配置运行测试之前结合 babel 先把测试用例代码转换一遍然后再进行测试 4.测试 ts
在 NodeJS 的世界里,也存在一个全面借鉴 Spring 设计思想的框架,它在 github 上有将近 2w 的 star,npm 的周下载量超过 11w,它就是本文要介绍的 NestJS。...二、与其它框架的对比 市面上 NodeJS 的服务端框架有很多,如Koa、Express、EggJS、Midway等,它们功能都很强大,也有很好的生态,插件非常丰富,为什么还需要Nest呢?...依赖注入最大的作用是代码解耦,依赖的对象根据不同的情况可以有多种实现,如单元测试的时候可以在不改业务代码的情况下将依赖的对象换成 Mock 数据。...另外也声明了模块内部的Controller和Provider。我们一般说的Service是Provider的一种。...(@Param('name') name: string): Promise { return this.catsService.findOne(name); } @Get(
1 MongoDB 中的操作与MysqlDB 中的查询操作对比展示 ---- 左边为Mongo 命令,右边为Mysql 命令: db.test.find() ==> select * from test...db.test.findOne() ==> select *from test limit 1 db.test.find().pretty() ==>select * from test \G db.test.find...应用场景: 1、如果需要将MongoDB作为后端DB来代替Mysql使用,即这里Mysql与MongoDB 属于平行级别。...(如日志之类) (2)、从datamodels设计阶段就将原子性考虑于其中,无需事务之类的辅助。开发用如nodejs之类的语言来进行开发,对开发比较方便。...(3)、MongoDB本身的failover机制,无需使用如MHA之类的方式实现。 2、将MongoDB作为类似redis ,memcache来做缓存DB,为Mysql提供服务,或是后端日志收集分析。
*支持完全索引,包含内部对象。 *支持查询。 *支持复制和故障恢复。 *使用高效的二进制数据存储,包括大型对象(如视频等)。...在JAVA中可使用如下方法连接: boolean auth = db.authenticate(userName, password); 如果用户名密码验证通过,返回值为true,否则为false 3...203, y : 102 } } 请注意,这个文档包含一个内部文档。...记住:MongoDB内部存储使用的元素名是以“_”做为开始。...myTweet.put("message", message); myTweet.put("date", new Date()); collection.insert(myTweet); 当一个文档从MongoDB
介绍 Vue-Test-Utils 是 Vue.js 官方的单元测试实用工具库,它提供了一系列的 API 来使得我们可以很便捷的去写 Vue 应用中的单元测试。...主流的单元测试运行器有很多,比如 Jest、Mocha 和 Karma 等,这几个在 Vue-Test-Utils 文档里都有对应的教程,这里我们只介绍 Vue-Test-Utils + Jest 结合的示例...❞ 环境配置 通过脚手架 vue-cli 来新建项目的时候,如果选择了 Unit Testing 单元测试且选择的是 Jest 作为测试运行器,那么在项目创建好后,就会自动配置好单元测试需要的环境,直接能用...但是新建项目之初没有选择单元测试功能,需要后面去添加的话,有两种方案: 第一种配置: 直接在项目中添加一个 unit-jest 插件,会自动将需要的依赖安装配置好。..." } } 第一个测试用例 为了保证环境的一致性,我们从创建项目开始一步一步演示操作步骤。
以下是将要使用的工具: NodeJS 版本7.2.0 MongoDB 3.4.1 Docker for Mac 1.12.6 在尝试本指南之前,应该具备: NodeJS 的基本知识 Docker 的基本知识...构建电影目录微服务 假设正在一家电影院的 IT 部门工作,给了我们一个任务,将他们的电影票务和杂货店从单体系统重构为微服务。...以下图表显示了通过 REST 进行的内部通信,通过此 REST 通信,可以使用 API 来获取目前正在上映的电影。...为了编写单元测试,必须对所有依赖项进行存根,即为模块提供虚拟依赖项。看看 spec 文件。...从 NodeJS 连接到 MongoDB 数据库 以下是需要从 NodeJS 连接到 MongoDB 数据库的配置。
在这一系列实战教程中,我们将手把手带你掌握 Jest、Enzyme、Cypress 等测试利器,帮助我们从 bug 的沼泽中挣脱出来,成为一个无往不利的高阶前端开发者!...初识 Jest 单元测试 测试是检查代码的代码,能够大大增强我们对应用的信心。更重要的是,测试会阻止你在修复一件事情的同时破坏另一件事情,让我们能够放开手脚进行功能的添加与大规模重构。...您可以测试应用程序的许多方面,从单个函数及其返回值到在浏览器中运行的复杂应用程序。万丈高楼平地起,让我们先来了解一下有哪些测试。...在这一系列教程中,我们将会从零开始,一步步带你熟悉从单元测试到端到端测试的方方面面。我们将会在一个 React 项目中实践所学到的自动化测试技术。...提示 你也许发现我们并没有去验证 TodoList 每一项是否符合,这是因为我们用了 Enzyme 的浅层渲染,这意味着所有的 children 都是处于未渲染状态,当然就无法验证内容是否正确了。
newAggregation, RecommendUser.class); //4、构造返回 return results.getMappedResults(); } 1.1.4、单元测试...地理位置检索 MongoDB 支持对地理空间数据的查询操作。...MongoDB内部支持多种GeoJson对象类型: Point 最基础的坐标点,指定纬度和经度坐标,首先列出经度,然后列出 纬度: 有效的经度值介于-180和之间180,两者都包括在内。...(Exception e) { e.printStackTrace(); return false; } } } 3.1.4、单元测试...(gender); Map map = userInfoApi.findByIds(userIds, userInfo); //4、构造返回值
包含了文档的内部修订版。此文档属性是可配置的。默认值为__v。如果不需要该版本号,在 schema 中添加{ versionKey: false}即可。...这个值包含文件的内部修订号。...如果值是一个函数,则函数的返回值用作默认值。 select: 布尔值 指定 query 的默认 projections validate: 函数,对属性添加验证函数。...它们的实例就代表着可以从数据库保存和读取的 documents。从数据库创建和读取 document 的所有操作都是通过 model 进行的。...查询 对于 Mongoosecha 的查找文档很容易,它支持丰富的查询 MongoDB 语法。包括find、findById、findOne等。
MongoDB不需要像关系型数据库一样提前设计表结构,但是仍然需要处理业务间的关系,甚至因为灵活性,其中一对多One-to-N需要格外注意。...One-to-N基本方法 MongoDB中One-to-N模型可以简单通过在父文档中嵌入一组子文档(sub-documents),但并不意味着你应该这么做。...单个N中冗余引用one 优点:方便从单个N查到One 缺点:必须同时更新两边的引用,也就是无法通过原子更新(atomic update)完成双向引用 反规范化(denormalizing) Many...// find the parent ‘host’ document > host = db.hosts.findOne({ipaddr : '127.66.66.66'}); // assumes...= db.logmsg.find({host: host.
/ nodejs驱动:https://github.com/mongodb/node-mongodb-native 1.1、安装MongoDB 下载地址:https://www.mongodb.com/..." --install 4)、错误处理 如果运行过程中提示“无法定位程序输入点ucrtbase.terminate于动态链接库api-ms-win-crt-runtime-|1-1-0.dll”错误,请下载安装...: db.students.find() b)、按条件查询(支持多条件):db.集合.find(条件); db.students.find({name:"tom",age:19}); 对象中的条件要求同时成立...c)、查询第一条(支持条件):db.集合.findOne(条件); d)、限制数量:db.集合.find().limit(数量); e)、跳过指定数量:db.表名.find().skip(数量)...students=db.collection("students"); let query={id:202204}; let result=await students.findOne
path双击,打开后点击“新建”,把bin目录的路径粘贴进去(我的是:E:\mongoDB\bin) 添加服务(开机自动启动) 注意:以管理员身份运行CMD 方法一:从配置文件启动 切换到bin目录中..." 方法二:直接命令行中配置 如果配置文件执行报错,无法启动,那么就自己在命令行配置mongoDB,切换到bin目录中,执行此命令(注意修改自己的路径): mongod --dbpath "E:\software...返回值是一个数组 db.....findOne() 用来查询集合中符合条件的第一个文档 返回的是一个文档 db....db.stus.findOne({gender:"女"}) db.stus.find({}).count() db.stus.find({}).length() 修改文档 db.
领取专属 10元无门槛券
手把手带您无忧上云