若是咱们仅仅是将本身的代码commit
、push
到github上,那么对于咱们的技术不会有太多的提高。咱们所作的仅仅只是将github当成了咱们的网盘。javascript
咱们每发布一个版本的时候,是否是也就意味着给用户一个新的版本——持续交付。html
显然我是在扯淡,这和敏捷软件开发没有什么关系。不过我也不知道瀑布流是怎样的。说说我所知道的一个项目的组成吧:java
对于一个不是远程的团队(如只有一我的的项目) 来讲,Trello、Jenkin、Jira不是必需的:node
你存在,我深深的脑海里git
当只有一我的的时候,你只须要明确知道本身想要什么就够了。咱们还须要的是CI、测试,以来提高代码的质量。github
一般咱们都会找Document,若是没有的话,你会找什么?看源代码,仍是看测试?ajax
it("specifying response when you need it", function (done) { var doneFn = jasmine.createSpy("success"); lettuce.get('/some/cool/url', function (result) { expect(result).toEqual("awesome response"); done(); }); expect(jasmine.Ajax.requests.mostRecent().url).toBe('/some/cool/url'); expect(doneFn).not.toHaveBeenCalled(); jasmine.Ajax.requests.mostRecent().respondWith({ "status": 200, "contentType": 'text/plain', "responseText": 'awesome response' }); });
代码来源: https://github.com/phodal/lettuceexpress
上面的测试用例,清清楚楚地写明了用法,虽然写得有点扯。npm
等等,测试是用来干什么的。那么,先说说我为何会想去写测试吧:json
虽然,我不是TDD的死忠,测试的目的是保证功能正常,TDD无法让咱们写出质量更高的代码。可是有时TDD是不错的,可让咱们写出逻辑更简单地代码。
也许你已经知道了Selenium
、Jasmine
、Cucumber
等等的框架,看到过相似于下面的测试
Ajax ✓ specifying response when you need it ✓ specifying html when you need it ✓ should be post to some where Class ✓ respects instanceof ✓ inherits methods (also super) ✓ extend methods Effect ✓ should be able fadein elements ✓ should be able fadeout elements
代码来源: https://github.com/phodal/lettuce
看上去彷佛每一个测试都很小,不过补完每个测试以后咱们就获得了测试覆盖率
File | Statements | Branches | Functions | Lines |
---|---|---|---|---|
lettuce.js | 98.58% (209 / 212) | 82.98%(78 / 94) | 100.00% (54 / 54) | 98.58% (209 / 212) |
本地测试都经过了,因而咱们添加了Travis-CI
来跑咱们的测试
虽然node.js不算是一门语言,可是由于咱们用的node,下面的是一个简单的.travis.yml
示例:
language: node_js node_js: - "0.10" notifications: email: false before_install: npm install -g grunt-cli install: npm install after_success: CODECLIMATE_REPO_TOKEN=321480822fc37deb0de70a11931b4cb6a2a3cc411680e8f4569936ac8ffbb0ab codeclimate < coverage/lcov.info
代码来源: https://github.com/phodal/lettuce
咱们把这些集成到README.md
以后,就有了以前那张图。
CI对于一个开发者在不一样城市开发同一项目上来讲是很重要的,这意味着当你添加的部分功能有测试覆盖的时候,项目代码会更增强壮。
像jslint
这类的工具,只能保证代码在语法上是正确的,可是不能保证你写了一堆bad smell的代码。
Code Climate
是一个与github集成的工具,咱们不单单能够看到测试覆盖率,还有代码质量。
先看看上面的ajax类:
Lettuce.get = function (url, callback) { Lettuce.send(url, 'GET', callback); }; Lettuce.send = function (url, method, callback, data) { data = data || null; var request = new XMLHttpRequest(); if (callback instanceof Function) { request.onreadystatechange = function () { if (request.readyState === 4 && (request.status === 200 || request.status === 0)) { callback(request.responseText); } }; } request.open(method, url, true); if (data instanceof Object) { data = JSON.stringify(data); request.setRequestHeader('Content-Type', 'application/json'); } request.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); request.send(data); };
代码来源: https://github.com/phodal/lettuce
在Code Climate在出现了一堆问题
而这些都是小问题啦,有时可能会有
这就意味着咱们能够对上面的代码进行重构,他们是重复的代码。
不想在这里说太多关于重构
的东西,能够参考Martin Flower的《重构》一书去多了解一些重构的细节。
这时想说的是,只有代码被测试覆盖住了,那么才能保证重构的过程没有出错。
上面所说的只是一堆堆地工具,以及一堆堆的方法,真正须要的是实践。
咱们须要有测试,有CI,这样咱们才能提升本身。
本文转自:https://www.phodal.com/blog/use-github-grow-self/