测试是什么
为检测特定的目标是否符合标准而采用专用的工具或者方法进行验证,并最终得出特定的结果。
首先它是一个检验,所以应该只有pass或fail两种情况。而检验的对象应该是某个接口或模块,所以应该调用它获得一个结果。检验这个结果就是单元测试的基本动作。
目的
避免需求和开发脱节,保证代码质量,可维护,可扩展性及方便问题的排查和后期的修正。
单元测试方法论
在单元测试中,常用的方法论有两个:TDD(测试驱动开发)&BDD(行为驱动开发)TDD&BDD。
断言库
所谓"断言",就是判断源码的实际执行结果与预期结果是否一致,如果不一致就抛出一个错误。所有的测试用例(it 块)都应该含有一句或多句的断言。它是编写测试用例的关键。
- better-assert TDD
- should.JS BDD
- expect.js BDD
- chai.js 双模 TDD BDD
- jasmine.js BDD
自动化单元测试
- karma 自动化rnner 集成PhantomJS无刷新 安装
->~ npm i jasmine-core --save-dev
->~ npm i karma --save-dev
->~ npm i karma-coverage --save-dev
->~ npm i karma-jasmine --save-dev
->~ npm i karma-phantomjs-launcher --save-dev
->~ npm i karma-babel-preprocessor --save-dev
->~ npm i babel-preset-env --save-dev
karma.conf.js 修改
preprocessors: {
'./**/*.js': ['coverage']
},
coverageReporter: {
type: 'html',
dir: 'coverage/'
},
reporters: ['progress', 'coverage'],
在项目下创建目录tests并编写测试代码
- 编写代码运行
tests/index.js
window.test = function (num) {
return num + 1
}
tests/index.spec.js
describe('测试test 函数', function () {
it('+1 测试', function () {
expect(test(1)).toBe(2)
})
})
运行测试
karma start
运行 ok
运行有错误
修改index.spec.js
describe('测试test 函数', function () {
it('+1 测试', function () {
expect(test(1)).toBe(4)
})
})
运行测试
karma start
覆盖率 coverage
打开coverage目录index可查看,如图: