Node assert (断言)
断言是什么
assert 模块提供了一组简单的断言测试,可用于测试不变量。
存在严格模式(strict)和遗留模式(legacy),但建议仅使用严格模式。
简单说就是用来做测试的
严格模式的引入: const assert = require('assert').strict;
遗留模式的引入: const assert = require('assert')
API 学习
1. assert.equal(actual, expected[, message])
message 是可选属性,报错抛出message
严格模式:assert.strictEqual
注意: 只能判断基本数据类型,引用类型不可以判断
assert.equa(1,1) // true 通过
assert.equa({a:1},{a:1}) // false 未通过
equal 表示 ==
strictEqual 表示 ===
// 所以要注意隐式转换的问题比如说
assert.equa("1",1) // true 通过
assert.strictEqual('1',1) // false 报错
2. assert.deepEqual(actual, expected[, message])
严格模式: assert.deepStrictEqual(actual, expected[, message])
解释: 判断期望值和实际值是否相等,可判断可枚举属性
具有equal函数的相同功能,也能判断对象,数组
assert.deepEqual(["1",2],[1,2]) // 通过
// 严格模式下
assert.deepStrictEqual(["1",2],[1,2]) //未通过
// 循环在比较数组中的每一个元素
主要就是是使用这2个严格模式
Mocha 测试框架
Mocha 是一个在Node.js和浏览器上运行的功能丰富的JavaScript测试框架,使异步测试变得简单而有趣。
Mocha 测试以串行方式运行,允许灵活准确的报告,同时将未捕获的异常映射到正确的测试用例
首先是安装
建议使用项目里面安装mocha,不然全部安装使用会影响别的项目.记得这是开发依赖
npm install --save-dev mocha
然后创建一个test 文件夹,所有的测试文件放在test下
- 编写测试
接下来我们可以编写测试案例了,新建一个add.js 代码如下
module.exports = function (a,b) {
return a+b;
};
下面我们就对这个函数进行测试在test文件夹下面新建一个test.js文件上面我们已经在项目中安装了mocha
const assert = require('assert');
const add = require('../add.js');
describe('#add', () =>{
it('sum(3,5) should return 8', () => {
assert.strictEqual(sum(3,5), 8);
})
})
这时候我们来看一下 deescribe 这个函数 可以任意嵌套多作为一个组,直白点就是给你当注释用的it 函数是一个测试用例 你可以下多个 放在it里面
现在我们要配置测试,我们在package.json里面配置一个test命名 对应 mocha 就可以了.
运行 npm test 那么一个测试就完成了
还有一些生命周期的函数,可以把下面这段代码添加进
describe('#add', () =>{
before(function () {
console.log('before:');
});
after(function () {
console.log('after.');
});
beforeEach(function () {
console.log(' beforeEach:');
});
afterEach(function () {
console.log(' afterEach.');
});
it('sum(3,5) should return 8', () => {
assert.strictEqual(sum(3,5), 8);
})
})
可以看一下这个生命周期,了解一下.
- 异步测试
用mocha测试一个函数是非常简单的,但是,在JavaScript的世界中,更多的时候,我们编写的是异步代码,所以,我们需要用mocha测试异步函数。
这里涉及一个新的知识点 async 函数,可能有的小伙伴不太会,这里啰嗦一下,因为我也不太懂
async 函数
我理解的 async
以前我们使用 callback。
后来我们使用 Promise。
现在我们使用 Async/Await。
Async - 定义异步函数(async function someName(){...})
- 自动把函数转换为 Promise
- 当调用异步函数时,函数返回值会被 resolve 处理
- 异步函数内部可以使用 await
Await - 暂停异步函数的执行 (var result = await someAsyncCall();)
- 当使用在 Promise 前面时,await 等待 Promise 完成,并返回 Promise 的结果
- await 只能和 Promise 一起使用,不能和 callback 一起使用
- await 只能用在 async 函数中
修改函数如下
module.exports = async ()=>{
let num = await setTimeout(() =>{
return 1
console.log(1)
},1000)
return num
}
然后编写一个测试函数
const assert = require('assert')
const sum = require('../add')
describe("#add", () =>{
it("测试异步", async () =>{
let result = await sum()
console.log(result)
console.log(1)
})
})
运行 npm test 查看结果.
- Http测试
<font color=red>暂时还没写</font>
karma
Karma的主要目标是为开发人员提供高效的测试环境。
环境是他们不必设置大量配置的环境,而是开发人员可以编写代码并从测试中获得即时反馈的地方。
因为获得快速反馈是让您富有成效和创造力的原因。
安装
建议的方法是在项目目录中本地安装Karma(以及项目需要的所有插件)。
# Install Karma:
$ npm install karma --save-dev
# Install plugins that your project needs:
$ npm install karma-jasmine karma-chrome-launcher jasmine-core --save-dev
这将安装karma,karma-jasmine,karma-chrome-launcher和jasmine-c到node_modules当前工作目录,
也可以作为保存这devDependencies的package.json,
所以,任何其他开发项目工作会只有这样做npm install才能得到所有这些依赖安装。
# Run Karma:
$ ./node_modules/karma/bin/karma start
官网建议安装一个全局的 方便命令
npm install -g karma-cli
如何集成到项目里面
Travis CI
Travis CI是一种流行的持续集成服务,它与您的Github存储库集成,
可在推送代码时自动运行测试。通过向项目根目录添加一个简单的YAML文件来完成集成 ;
Travis和Github负责其余的工作。每当测试时,Travis结果将出现在您的Github拉取请求中,
您的历史记录将在其控制面板中提供。本文假设您已经拥有Travis帐户。
配置
首先是去 travis官网去注册一下 用GitHub账号
然后回读取你的GitHub项目开源的,里面有个设置 打开就好了.Travis会在代码push时收到GitHub通知,然后自动获取最新代码,进行CI。
但是我们还是需要编写一个.travis.yml文件来告诉Travis一些项目信息
language: node_js
node_js:
- 0.4
- 0.6
前端的配置
package.json 里面要配置个命令
"scripts": {
"test": "mocha"
},
Mocha 已经安装过全局了
然后push的时候就自动触发 npm test