TDD尝试:nodejs单元测试
2024-08-31 03:22:41
单元测试是最小化的测试方式,也是TDD的做法。
TDD概念如下图:
通过测试反馈推进开发,ruby是推崇这种编程方式的。
nodejs有如下常用单元测试模块
1.mocha
Mocha是一个基于node.js和浏览器的集合各种特性的Javascript测试框架,并且可以让异步测试也变的简单和有趣。Mocha的测试是连续的,在正确的测试条件中遇到未捕获的异常时,会给出灵活且准确的报告。
安装:
npm install -g mocha
const assert = require("assert"); describe('Array', function() {
describe('#indexOf()', () => {
it('should return -1 when the value is not present', () =>{
assert.equal(-1, [1,2,3].indexOf(5));
assert.equal(-1, [1,2,3].indexOf(0));
});
});
});
describe里面第一个参数为输出展示该测试段的目标,第二个参数为回调,里面写需要测试的case。
进行测试:
mocha filename
可以用于测试utils里面封装的常用函数,个人认为适合一些非http请求类代码测试。
2.should
require("should"); var name = "tonny"; describe("Name", function() { it("The name should be tonny", function() { name.should.eql("tonny"); }); }); var Person = function(name) { this.name = name; }; var zhaojian = new Person(name); describe("InstanceOf", function() { it("Zhaojian should be an instance of Person", function() { zhaojian.should.be.an.instanceof(Person); }); it("Zhaojian should be an instance of Object", function() { zhaojian.should.be.an.instanceof(Object); }); }); describe("Property", function() { it("Zhaojian should have property name", function() { zhaojian.should.have.property("name"); }); });
should的用法让测试代码可读性更强。
3.supertest
用于http请求测试。
const request = require('supertest');
const express = require('express'); const app = express(); app.get('/user', function(req, res){
res.send(200, { name: 'tobi' });
}); request(app)
.get('/user')
.expect('Content-Type', /json/)
.expect('Content-Length', '20')
.expect(200)
.end(function(err, res){
if (err) throw err;
});
之前我们遇到的中间件检查问题,就可以通过这个模块来进行不同case的测试,保证接口逻辑上无偏差。
4.istanbul 代码覆盖率检查工具
用法 :
istanbul cover filename
命令行模式会显示覆盖率情况。
之后会生成coverage文件夹,里面有html方式生成的覆盖率报表。
其实单元测试在一些业务相对稳定,但是逻辑情况比较复杂的项目中可以对于一些重要的代码进行全覆盖测试,代码的稳健不光是靠编程技术和思维,也需要一定的辅助测试,在多人团队协作开发中愈发重要。
单元测试和编程语言类型无关,它是一种良好的编程习惯。
最新文章
- Web Js 按键事件……Enter提交事件 Enter Js事件
- node基础13:异步流程控制
- 模块化编程时,#include到底要放在哪里?
- 面试整理之DOM事件阶段
- [BS] 小知识点总结-02
- C# 中Newtonsoft.Json的安装和使用
- 64位ubuntu安装交叉编译工具链,显示找不到命令
- KVM网络桥接模式解说
- Http协议响应状态类别及说明
- Appium环境配置(二)
- [jsp] - jsp引入c标签出错
- 【C++】STL算法之remove_if
- 云平台项目--学习经验--jsrender前端渲染模板
- SSH整合 第五篇 struts2的到来
- Struts dispatchAction
- mybatis支持的jdbc类型
- oracle数据库之游标的使用
- dev_queue_xmit 发生了什么?skb还会在哪里缓存
- 利用ncurses库开发终端工具箱(1)—— ToDoList小工具开发
- springboot示例参考网站