nodejs 单元测试
之前项目开发因为改进度,基本都是粗放式开发。为了提高代码质量,单元测试是必不可少的。
针对restful api ,用supertest 测试框架。针对nodejs,引入mocha 和should 可以方便编写单元测试。
首先谈谈supertest,它封装了mocha和expect 模块。用法也比较简洁,例子:
var request = require('supertest'); var express = require('express'); let should=require('should');var app = require('../app'); var port = process.env.PORT || 3000; app.set('port', port); describe('supertest 验证', function() {beforeEach(function() {console.log('before every test in every suit');});it('get 请求', function(done) {request(app).get('/').set('Cache-control', 'no-cache').expect(200, done);});it('Post 请求', function(done) {request(app).post('/sayHello').set('Content-Type', 'application/json').send({username:'ryan',password:'chen'}).expect('Content-Type', /json/).expect(200,{message:"ryan你好"}, done);});});
如上代码所示,整体看是比较easy清爽的。可以设置header和对比返回值,至于token的验证,在测试时根据环境变量取消即可。
should 是个好同志,可以帮助我们方便比较。至于用法,如下:
1 describe('should test', function () { 2 "use strict"; 3 beforeEach(function () { 4 }); 5 it('ok', function (done) { 6 true.should.be.ok; 7 (5).should.be.exactly(6).and.be.a.number; 8 done(); 9 }); 10 it('true',function (done) { 11 true.should.be.true; 12 'true'.should.not.be.true; 13 done(); 14 }); 15 //content compare,not reference 16 it('eql', function () { 17 ({ foo: 'bar',num:1 }).should.eql({ foo: 'bar',num:1}); 18 //[1, 2, 3].should.eql({ '0': 1, '1': 2, '2': 3 }); 19 20 }); 21 //to be exactly, 22 it('equal',function () { 23 (4).should.equal(4); 24 'test'.should.equal('test'); 25 [1,2,3].should.be.not.exactly([1,2,3]); 26 }); 27 //>= or <= 28 it('within', function () { 29 (5).should.be.within(5, 10).and.within(5, 5); 30 (5).should.be.above(0); 31 }); 32 //.Infinity 33 it('infinity', function () { 34 (1/0).should.be.Infinity; 35 }); 36 //instanceof 37 it('instanceof', function () { 38 let ball=new Ball(11,"red"); 39 ball.should.be.an.instanceOf(Ball); 40 [].should.be.an.instanceof(Array); 41 }); 42 43 it('properties',function () { 44 let ball=new Ball(11,"red"); 45 46 ball.should.have.properties('color'); 47 ball.should.have.properties({size:11,color:"red"}); 48 }); 49 it('empty', function () { 50 [].should.be.empty; 51 ''.should.be.empty; 52 ({}).should.be.empty; 53 (function() { 54 arguments.should.be.empty; 55 })(); 56 }); 57 it('containEql', function () { 58 'hello boy'.should.containEql('boy'); 59 [1,2,3].should.containEql(3); 60 [[1],[2],[3]].should.containEql([3]); 61 [[1],[2],[3, 4]].should.not.containEql([3]); 62 }); 63 //regex 64 it('regex or function', function () { 65 ['a', 'b', 'c'].should.match(/[a-z]/); 66 (5).should.match(function(n) { return n > 0; }); 67 (5).should.not.match(function(n) { return n < 0; }); 68 }); 69 it('match each', function () { 70 [10, 11, 12].should.matchEach(function(it) { return it >= 10; }); 71 }); 72 73 it('exception', function () { 74 (function(){ 75 throw new Error('fail'); 76 }).should.throw(); 77 }); 78 79 it('status',function () { 80 //res.should.have.status(200); 81 //res.should.have.header('Content-Length', '123'); 82 //res.should.be.json 83 84 }) 85 86 }); 87 88 class Ball 89 { 90 constructor(size,color) 91 { 92 Object.assign(this,{size,color}); 93 } 94 }
View Code
可以在控制台,用mocha 命令 测试,会默认找项目根目录下test文件夹,所以单元测试要放到此文件下。执行后,会测试当前文件夹下所有的单元测试:
开发工具如果用的是webstorm,有个比较方便的插件。可在插件里面搜 nodejs,安装后,可在启动配置中添加mocha,
配置后,直接启动
可以看到,这样的话可以选择其中某个测试用例测试,比输入脚本方便了好多。bingo
转载于:https://www.cnblogs.com/ryansecreat/p/6150678.html
nodejs 单元测试相关推荐
- 软件测试nodejs面试题,nodejs单元测试和性能测试
好算法理应正确.可读.健壮和效率高与低存储量:为保证正确性,多组输入数据测试这是必须条件:效率高和低存储这涉及了接口代码的性能测试.测试驱动开发TDD以实现有效和高效的算法代码. 一.安装配置 确保已 ...
- Node.js 单元测试:我要写测试 - Mocha - Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率
-------------------------------------- 单元测试Express/NodeJs 个人理解, 1,如果不是测试http请求的单元测试,用Mocha, Chai等基本够 ...
- My Toolkit of Node.js
原文链接:BlueSun | My Toolkit of Node.js Cheerio Fast, flexible, and lean implementation of core jQuery ...
- 单元测试:使用mocha和should.js搭建nodejs的单元测试
2019独角兽企业重金招聘Python工程师标准>>> BDD测试利器:mocha+should.js 众所周知对于任何一个项目来说,做好单元测试都是必不可少的一项工作.今天在逛Cn ...
- node.js测试html tdd,nodejs的单元测试框架mocha
# nodejs的单元测试框架mocha 当我们编写比较复杂的项目时,需要对项目的测试用例进行长期跟踪,对单元模块进行质量控制,对开发成果进行自我检验,那么需要一个好用的工具,自学了一下mocha,这 ...
- windows下nodejs express安装及入门网站,视频资料,开源项目介绍
windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件 下载地址 ...
- nodejs 获取文件路径_Qunar 酒店 Nodejs 覆盖率收集实践
作者介绍 马涛,2013 年加入去哪儿网技术团队,目前在目的地事业部,负责 H5.小程序类应用开发.个人对移动端技术领域和前后端工程化有浓厚兴趣,勇于探索实践追求极致. 概述 一般来讲我们是通过写单元 ...
- Karma和Jasmine 自动化单元测试环境搭建
最近初学AngularJS ,看到的一些教程中经常有人推荐使用Karma+Jasmine来进行单元测试.自己之前也对Jasmine有些了解,jasmine也是一个不错的测试框架. 1. karma介绍 ...
- 前端笔记之NodeJS(四)MongoDB数据库Mongoose自制接口MVC架构思想|实战
一.MongoDB数据库 1.1 NoSQL简介 随着互联网web2.0网站的兴起,传统的SQL数据库(关系数据库)在应付web2.0网站,特别是超大规模和高并发的SNS(social network ...
最新文章
- 最大公约数和最小公倍数的欧几里得算法
- undistortPoints()函数用法总结
- Re:从零开始的机器学习 - Machine Learning(一) 线性回归
- PacificA: Replication in Log-Based Distributed Storage Systems 论文理解
- html 如何去除浮动,CSS浮动? 如何清除浮动?
- Logistics模型预测银行贷款违约
- php 非数字和字母,如何通过非数字与字符的方式实现PHP WebShell详解
- Gitlab的使用总结
- php结束外部程序,PHP执行外部程序的方法
- 记一次new Map()
- sonar不支持mysql_sonar-iOS的实践
- C语言中 指针和数组
- JQuery EasyUI框架
- comsol 5.3 matlab,COMSOL5.3在Linux下的安装
- [附源码]Java计算机毕业设计SSM房屋租赁管理系统设计
- windows 7系统中单独添加北京时区办法
- 残留的Ramnit埋伏中国热门网站后台
- Eclipse创建C++工程并解决“Symbol 'std' could not be solved”
- JSF 标签大全(非常详细 有例子)
- 土豆视频搜索显示服务器走丢了,她往土里丢了一个土豆,结果家里变成了菜园!...