之前项目开发因为改进度,基本都是粗放式开发。为了提高代码质量,单元测试是必不可少的。

针对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 单元测试相关推荐

  1. 软件测试nodejs面试题,nodejs单元测试和性能测试

    好算法理应正确.可读.健壮和效率高与低存储量:为保证正确性,多组输入数据测试这是必须条件:效率高和低存储这涉及了接口代码的性能测试.测试驱动开发TDD以实现有效和高效的算法代码. 一.安装配置 确保已 ...

  2. Node.js 单元测试:我要写测试 - Mocha - Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率

    -------------------------------------- 单元测试Express/NodeJs 个人理解, 1,如果不是测试http请求的单元测试,用Mocha, Chai等基本够 ...

  3. My Toolkit of Node.js

    原文链接:BlueSun | My Toolkit of Node.js Cheerio Fast, flexible, and lean implementation of core jQuery ...

  4. 单元测试:使用mocha和should.js搭建nodejs的单元测试

    2019独角兽企业重金招聘Python工程师标准>>> BDD测试利器:mocha+should.js 众所周知对于任何一个项目来说,做好单元测试都是必不可少的一项工作.今天在逛Cn ...

  5. node.js测试html tdd,nodejs的单元测试框架mocha

    # nodejs的单元测试框架mocha 当我们编写比较复杂的项目时,需要对项目的测试用例进行长期跟踪,对单元模块进行质量控制,对开发成果进行自我检验,那么需要一个好用的工具,自学了一下mocha,这 ...

  6. windows下nodejs express安装及入门网站,视频资料,开源项目介绍

    windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件 下载地址 ...

  7. nodejs 获取文件路径_Qunar 酒店 Nodejs 覆盖率收集实践

    作者介绍 马涛,2013 年加入去哪儿网技术团队,目前在目的地事业部,负责 H5.小程序类应用开发.个人对移动端技术领域和前后端工程化有浓厚兴趣,勇于探索实践追求极致. 概述 一般来讲我们是通过写单元 ...

  8. Karma和Jasmine 自动化单元测试环境搭建

    最近初学AngularJS ,看到的一些教程中经常有人推荐使用Karma+Jasmine来进行单元测试.自己之前也对Jasmine有些了解,jasmine也是一个不错的测试框架. 1. karma介绍 ...

  9. 前端笔记之NodeJS(四)MongoDB数据库Mongoose自制接口MVC架构思想|实战

    一.MongoDB数据库 1.1 NoSQL简介 随着互联网web2.0网站的兴起,传统的SQL数据库(关系数据库)在应付web2.0网站,特别是超大规模和高并发的SNS(social network ...

最新文章

  1. 最大公约数和最小公倍数的欧几里得算法
  2. undistortPoints()函数用法总结
  3. Re:从零开始的机器学习 - Machine Learning(一) 线性回归
  4. PacificA: Replication in Log-Based Distributed Storage Systems 论文理解
  5. html 如何去除浮动,CSS浮动? 如何清除浮动?
  6. Logistics模型预测银行贷款违约
  7. php 非数字和字母,如何通过非数字与字符的方式实现PHP WebShell详解
  8. Gitlab的使用总结
  9. php结束外部程序,PHP执行外部程序的方法
  10. 记一次new Map()
  11. sonar不支持mysql_sonar-iOS的实践
  12. C语言中 指针和数组
  13. JQuery EasyUI框架
  14. comsol 5.3 matlab,COMSOL5.3在Linux下的安装
  15. [附源码]Java计算机毕业设计SSM房屋租赁管理系统设计
  16. windows 7系统中单独添加北京时区办法
  17. 残留的Ramnit埋伏中国热门网站后台
  18. Eclipse创建C++工程并解决“Symbol 'std' could not be solved”
  19. JSF 标签大全(非常详细 有例子)
  20. 土豆视频搜索显示服务器走丢了,她往土里丢了一个土豆,结果家里变成了菜园!...

热门文章

  1. LuoguP4841 城市规划
  2. C#中访问私有成员技巧
  3. 第二章:Webdriver 控制浏览器前进和后退
  4. ubuntu设置自动休眠
  5. DEDE 字符串操作常见问题
  6. freemarker配置
  7. Android编译笔记二
  8. s4-2 ALOHA 协议
  9. linux内核分析期末,Linux内核分析作业
  10. js 设置 table 第一个 tr_华胜天成参与起草中国主导的第一个云计算国际技术报告...