2016.5.11 r囧r小猫 2022-08-22 03:49 69阅读 0赞 1.《浏览器端测试:mocha,chai,phantomjs》 mocha init 测试框架脚手架。 mocha init (显示错误,只有mocha init file 在file中才正确) 或者 mocha init .(点不要忘了) . ├── index.html # 这是前端单元测试的入口 ├── mocha.css ├── mocha.js └── tests.js # 我们的单元测试代码将在这里编写 其中 index.html 是单元测试的入口,tests.js 是我们的测试用例文件。 我们直接在 index.html 插入上述示例的需要测试的函数以及断言库 chaijs。 然后在tests.js中写入对应测试用例; 这时打开index.html,可以发现测试结果,我们完成了浏览器端的脚本测试(注意我们调用了 **window** 对象) 1)测试脚本 所谓"测试脚本",就是用来测试源码的脚本; 下面是一个加法模块[`add.js`][add.js]的代码。 // add.js function add(x, y) { return x + y; } module.exports = add; 要测试这个加法模块是否正确,就要写测试脚本。 通常,测试脚本与所要测试的源码脚本同名,但是后缀名为`.test.js`(表示测试)或者`.spec.js`(表示规格)。比如,`add.js`的测试脚本名字就是[`add.test.js`][add.test.js]。 // add.test.js var add = require('./add.js'); var should = require('chai').should; describe('加法函数的测试', function() { it('1 加 1 应该等于 2', function() { add(1, 1).should.equal(2); }); }); 上面这段代码,就是测试脚本,它可以独立执行。测试脚本里面应该包括一个或多个`describe`块,每个`describe`块应该包括一个或多个`it`块。 `describe`块称为"测试套件"(test suite),表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称("加法函数的测试"),第二个参数是一个实际执行的函数。 `it`块称为"测试用例"(test case),表示一个单独的测试,是测试的最小单位。它也是一个函数,第一个参数是测试用例的名称("1 加 1 应该等于 2"),第二个参数是一个实际执行的函数。 2)断言库 昨天学的是should,今天看到的是expect。都可以从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; // match expect('foobar').to.match(/^foo/); 3)mocha的用法 有了测试脚本,运行测试脚本即可 $ mocha add.test.js Mocha默认运行 `test`子目录里面的测试脚本。所以,一般都会把测试脚本放在 `test`目录里面,然后执行 `mocha`就不需要参数了 2.正则表达式 漫长的记忆过程。之前看了现在又忘记了. 库。测试不容function速度的 bench.. 4.npm install --save 与 npm install --save-dev 的区别 一个放在package.json 的dependencies , 一个放在devDependencies里面. 5.闭包以及闭包的坑 for (var i = 0; i < 5; i++) { setTimeout(function () { console.log(i); }, 5); } 上面这个代码块会打印五个 `5` 出来,而我们预想的结果是打印 0 1 2 3 4。 之所以会这样,是因为 setTimeout 中的 i 是对外层 i 的引用。当 setTimeout 的代码被解释的时候,运行时只是记录了 i 的引用,而不是值。而当 setTimeout 被触发时,五个 setTimeout 中的 i 同时被取值,由于它们都指向了外层的同一个 i,而那个 i 的值在迭代完成时为 5,所以打印了五次 `5`。 为了得到我们预想的结果,我们可以把 i 赋值成一个局部的变量,从而摆脱外层迭代的影响。 for (var i = 0; i < 5; i++) { (function (idx) { setTimeout(function () { console.log(idx); }, 5); })(i); } 打印结果:0 1 2 3 4 因为idx变量只在函数块内有作用域。当i变化为1时,调用新的function,此时因为与之前的function不同(i为0的function还压在堆栈没有被调用),因此此时的idx必须是新的(之前的idx作用不到这个function来) 彻底明白了。 6.mysql培训 1)用户与授权 2)mysql 常用的函数 count/sum/max/min/avg/abs/round/cast/convert/ifnull/date\_format/now/substr/concat 3)left join right join inner jion 3)group by 与select一起的时候注意select的个数与group by个数的一致,否则容易出错 4)mysql的不等于号 <> 5)select 语句 不论里面包含怎样的语句或者函数,不会改变原数据库中的数值 6)为null的字段或者字符类型,不能直接用在where查询中用于比较 7)mysql 事件(事件调度器) [add.js]: https://github.com/ruanyf/mocha-demos/blob/master/demo01/add.js [add.test.js]: https://github.com/ruanyf/mocha-demos/blob/master/demo01/add.test.js
还没有评论,来说两句吧...