一、assert
1. Node assert
assert模块是Node的内置模块,主要用于断言。如果表达式不符合预期,就抛出一个错误,可用于测试模块功能
2.assert.deepEqual(actual, expected[, message])
- 比较实际值是否等于预期值。相当于===
3.assert.assert.deepStrictEqual(actual, expected[, message]))
注意点 deepStrictEqual相当于===
4.assert.doesNotThrow(block, error)
doesNotThrow预期不一样的时候,预期某个代码块不抛出错误
5.assert.equal(actual, expected[, message])
注意点:equal方法内部使用的是相等运算符(==),而不是严格运算符(===),进行比较运算。
6.assert.fail(actual, expected, message, operator)
fail方法用于抛出一个错误
7.assert.ifError(value)
ifError方法断言某个表达式是否false
8.assert.notDeepEqual(actual, expected[, message])
9.assert.notEqual(actual, expected[, message])
10.assert.notStrictEqual(actual, expected[, message])
比较值,相当于==
11.assert.ok(value[, message])
ok是assert方法的另一个名字,与assert方法完全一样。
12.assert.strictEqual(actual, expected[, message])
相当于比较 ===
13.assert.throws(block, error)
throws方法预期某个代码块会抛出一个错误,且抛出的错误符合指定的条件
二、mocha
mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行。
使用mocha,我们就只需要专注于编写单元测试本身,然后,让mocha去自动运行所有的测试,并给出测试结果。
mocha的特点主要有:
既可以测试简单的JavaScript函数,又可以测试异步代码,因为异步是JavaScript的特性之一
可以自动运行所有测试,也可以只运行特定的测试;
可以支持before、after、beforeEach和afterEach来编写初始化代码。
三、TDD和BDD
BDD:Behavior Driven Development,行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发这。
TDD:Test-Driven Development,就是测试驱动开发,它是一种测试先于编写代码的思想用于指导软件开发,测试驱动开发是敏捷开发中的一项核心时间和技术,也是一种设计方法论,TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码
四、Karma
karma是由Google团队开发的一套前端测试运行框架。
1.安装相关插件
npm install karma-cli -g
npm install karma jasmine-core karma-jasmine karma-phantomjs-launcher -D复制代码
2.对工程进行初始化
karma init复制代码
3.初始化完成之后,会在项目中生成karma.conf.js 文件,这个文件就是 Karma 的配置文件
/ Karma configuration
// Generated on Sun Oct 29 2017 21:45:27 GMT+0800 (CST)
module.exports = function(config) {
config.set({
// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '',
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine'],
// list of files / patterns to load in the browser
files: [
"./src/**/*.js",
"./test/**/*.spec.js",
],
// list of files to exclude
exclude: [
],
// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
},
// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['progress'],
// web server port
port: 9876,
// enable / disable colors in the output (reporters and logs)
colors: true,
// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: false,
// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: ['PhantomJS'],
// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: true,
// Concurrency level
// how many browser should be started simultaneous
concurrency: Infinity
})
}复制代码
4.然后创建一个 src 目录和一个 test 目录,在其中分别创建 index.js 和 index.spec.js 文件。对 index.js 中的函数进行测试。
index.js 文件如下:
// 加法函数
function add(x){
return function(y){
return x + y;
}
}复制代码
index.spec.js 文件如下:
describe("运算功能单元测试",function(){
it("加法函数测试",function(){
var add5 = add(5)
expect(add5(5)).toBe(10)
});
})复制代码
6.使用 karma start
来运行单元测试