【myChange】change11: HeyGirl. 来一杯mocha
![]() |
不知道从什么时候开始就流失了自己的时间,很多事还没有开始做就已经没有时间去完成了。
我 对此 产生了 极其 厌恶的 心理。
晚上去遛狗的时候也顺便溜溜自己,
有空就陪陪小裴说说话,瞎胡扯,就觉得这样是属于自己的时间了。
最近意外的停止了思考,无论是对学习还是对人生。不愿意去思考。
不知道自己该做什么的感觉 很慌。
明明心里都炸了锅了,还表面上看上去跟没事的人一样。什么都忍,跟她一样。
希望小裴每天都好一点。比昨天好一点。
To 小裴:
我不想说 我第一次见你就喜欢你这样俗气的话,尽管这是事实。
我不想说 我想跟你共度余生这么虚伪的话,尽管这是事实。
我不想说 我真诚的喜欢你胜过喜欢我自己这么自大的话,尽管这是事实。
我不愿成为炙烤的烈日,不愿成为夏日的暴雨。
我只愿成为,一阵穿堂而过的最温柔的风。
你站在桥上看风景,看风景的人在楼上看你。
我不愿意成为那风景,也不会成为那人。
我只愿成为,你脚下的桥。
那么,矫情过后,就来一杯mocha吧~ girl.~
0.directory tree
先看看我的mocha的基本结构,如下。
|---node_modules
|---string
|---css
|---js
|---test
|---views
|---package.json
对应目录下的模块是一一对应的。
![]() |
一些基本的模块名称,还有一些共有的js和css,其中mocha.js和mocha.css,毋庸置疑是mocha自带的js和样式。getParams.js是一个用来获取地址栏链接后面参数的方法(之后会用到)。
1.base
mocha,摩卡,是咖啡的一种,js测试框架之一
package.json 中配置常用的参数(加载器)
之后npm之后,在根目录生成node_module
最好在安装一下全局mocha $npm install --global mocha
2.named
测试脚本的命名规范。×××.js 的mocha测试文件名称为 ×××.test.js
mocha一般是编译相应目录下的test文件夹,
如果想要编译指定目录下的文件,可以在mocha.opts里面设置
mocha.opts可以再设置执行mocha script时候的一些默认参数
3.option params
可以通过--help查找option的提示
--reporter spec 报告的方式
--recursive 深度执行,包括子目录
--growl 桌面报告
--trace 跟踪回调
--bail 第一次遇到错误就终止执行
--watch 监听
4.mocha.opts
设置mocha的参数,或者可以设置mocha执行的指定文件夹,执行指定文件夹中的js。
基本写法就和gitignore类似,参数在上面的第3点中也提到过。
5.the grammar of test.js
---------->>> 在该步骤之前,需要了解的内容:断言 <<< ----------
1.断言是一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。
2.Chai是一个BDD/TDD模式的断言库,可以再node和浏览器环境运行,可以高效的和任何js测试框架搭配使用。
3.mocha的断言能力比较差,用chai会好很多。
# npm install -g mocha
# npm install chai
4.BDD行为驱动开发是一种敏捷软件开发的技术,包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。
5.我们指定断言chai用expect的断言风格,语法基本如下:
// 相等或不相等
expect(4 + 5).to.be.equal(9);
expect(4 + 5).to.be.not.equal(10);
expect(foo).to.be.deep.equal({ bar: 'baz' });
// 布尔值为true
expect('everthing').to.be.ok;
expect(false).to.not.be.ok;
// typeof
expect('test').to.be.a('string');
expect({ foo: 'bar' }).to.be.an('object');
expect(foo).to.be.an.instanceof(Foo);
// include
expect([1,2,3]).to.include(2);
expect('foobar').to.contain('foo');
expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');
// empty
expect([]).to.be.empty;
expect('').to.be.empty;
expect({}).to.be.empty;
---------->>> 断言的补充基本结束 <<< ----------
require 对应的js文件和断言。
describe块称为"测试套件"(test suite),表示一组相关的测试。
describe('suite name',function(){});
它是一个函数,第一个参数是测试套件的名称,第二个参数是一个实际执行的函数。
在describe中可以嵌套多个it模块。
describe('suite name',function(){
it('case name',function(){
expect()....//Todo
});
it('case name',function(){
expect()....//Todo
});
});
it块称为"测试用例"(test case),表示一个单独的测试,是测试的最小单位。
它也是一个函数,第一个参数是测试用例的名称,第二个参数是一个实际执行的函数。
编写测试用例采用了路径测试;
6.grammar detail
describe也存在一些钩子,可以在钩子内设置一些参数,然后再执行it的测试用例。
describe('hooks', function() {
before(function() {});// 在本区块的所有测试用例之前执行
after(function() {});// 在本区块的所有测试用例之后执行
beforeEach(function() {});// 在本区块的每个测试用例之前执行
afterEach(function() {});// 在本区块的每个测试用例之后执行
});
同时describe和it都存在一些特殊的方法,便于我们在测试用例过多的时候处理一些特殊情况。
only只执行以下套件或用例。
describe.only('suite name', function(){});
it.only('case name', function(){});
skip跳过不执行以下套件或用例。像continue
describe.skip('suite name', function(){});
it.skip('case name', function(){});
7.由浅入深,将演示4种测试
① 纯粹的断言测试,只存在一个测试文件:/test/direct
如函数测试‘function.test.js’、类型测试‘type.test.js’
![]() |
![]() |
② 简单的测试,在js下中写好function,再在test下mocha它们:/test/count
如乘法测试‘multiply.test.js’
![]() |
③ 复杂的测试,在js下中写好function,再在test下mocha它们:/test/regExp
如正则表达式的测试‘regExp.test.js’
---------->>> 可能会遇到的问题 <<< -----------
1.require.amd
CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。
AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。可以作为判断require.js的unique
define(function(require, exports, module) {// CMD
var a = require('./a');
a.doSomething();
var b = require('./b'); // 依赖可以就近书写
b.doSomething();
})
define(['./a', './b'], function(a, b) { // AMD 默认推荐的是,依赖必须一开始就写好
a.doSomething();
b.doSomething();
})
2. 'use strict' 是进入"严格模式"的标志,其好处是:
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
3. require()函数接受两个参数。
第一个参数是一个数组,表示所依赖的模块;
第二个参数是一个回调函数,当前面指定的模块都加载成功后,它将被调用。加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块。
require(['jquery', 'underscore', 'backbone'], function ($, _, Backbone){
//Todo
});
---------->>> 可能会遇到的问题结束 <<< ----------
![]() |
在这里会进行一个判断,这里的主要问题是 “自执行函数” 的问题。
第一个括号里面的匿名函数中的参数分别对应第二个括号里面的两个参数。
这里可能很容易被迷惑,有可能和闭包混起来,但是仔细想想也能想通。
![]() |
经常需要进行测试的正则表达式,写了很多路径测试case。
之后在命令行中输入mocha,执行命令。
因为我们已经在/test/mocha.opts里面配置了参数,所以在执行mocha指令的时候,会自带opts里面的参数,返回的结果如下。
![]() |
④ 在浏览器上进行测试,在html下写好页面index.html,并写好做一个网页测试的iframe的test.html.
在/js下,载入mocha.js,在/css下,载入mocha.css.
![]() |
/js/array/index.js里面写好function算法。/test/array/index.test.js里面写好function算法。
![]() |
主要算法是测试数组去重算法吗,结果如下:
![]() |
![]() |
虽然在科研中心开会的时候,我说的不是很清楚,没有准备充分,也没有好好说明mocha的具体使用和在什么场景下使用。当时的我由于前一天晚上几乎没睡,整个人都是懵逼的。最后还好有师傅柯哲的救场,才避免了我的尴尬 = =
路还很长,我不能停止思考。୧(﹒︠ᴗ﹒︡ )୨
还没人赞这篇日记