浅谈JavaScript 代码整洁之道(13)

测试

测试比生产更重要。如果你不进行测试,或者测试的量不够,那你就不能肯定你写的代码不会造成破坏。测试数量依靠你的开发团队来决定,但 100% 覆盖率(所有语句和分支)能让你拥有巨大的信心,也能使程序员们安心。也就是说,你需要一个不错的测试框架,还需要一个好的覆盖检查工具.

没有什么理由可以让你不写测试。这里有 大量不错的JS 测试框架,可以去找个你们团队喜欢的来用。如果你找一个适合在你的团队中使用的工作,就把为每个新产生的特性/方法添加测试作为目标。如果你喜欢测试驱动开发(TDD)的方法,非常好,但要注意在让你的测试覆盖所有特性,或者重构过的代码。

每次测试一个概念

不好:

const assert = require('assert');

describe('MakeMomentJSGreatAgain', function() {
 it('handles date boundaries', function() {
  let date;

  date = new MakeMomentJSGreatAgain('1/1/2015');
  date.addDays(30);
  date.shouldEqual('1/31/2015');

  date = new MakeMomentJSGreatAgain('2/1/2016');
  date.addDays(28);
  assert.equal('02/29/2016', date);

  date = new MakeMomentJSGreatAgain('2/1/2015');
  date.addDays(28);
  assert.equal('03/01/2015', date);
 });
});

好:

const assert = require('assert');

describe('MakeMomentJSGreatAgain', function() {
 it('handles 30-day months', function() {
  let date = new MakeMomentJSGreatAgain('1/1/2015');
  date.addDays(30);
  date.shouldEqual('1/31/2015');
 });

 it('handles leap year', function() {
  let date = new MakeMomentJSGreatAgain('2/1/2016');
  date.addDays(28);
  assert.equal('02/29/2016', date);
 });

 it('handles non-leap year', function() {
  let date = new MakeMomentJSGreatAgain('2/1/2015');
  date.addDays(28);
  assert.equal('03/01/2015', date);
 });
});

Concurrency

使用 Promise 而不是回调

回调并不整洁,它会导致过多的嵌套。ES6 的Promise 是个内置的全局类型。使用它!

不好:

require('request').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin', function(err, response) {
 if (err) {
  console.error(err);
 }
 else {
  require('fs').writeFile('article.html', response.body, function(err) {
   if (err) {
    console.error(err);
   } else {
    console.log('File written');
   }
  })
 }
})

好:

require('request-promise').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin')
 .then(function(response) {
  return require('fs-promise').writeFile('article.html', response);
 })
 .then(function() {
  console.log('File written');
 })
 .catch(function(err) {
  console.error(err);
 })


      

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/417.html