第一周

作者: TinyScript | 来源:发表于2018-02-02 12:26 被阅读0次

以下所有内容都是基于 这周的作业 的记录,主要是讲解配置travis-ci和coverage的心路历程,主要是倾诉为什么会产生50+的commit。

由于只是心路历程,可能并不通用于所有人。

首先肯定是先把作业完成,由于之前在公司经常跟后台一起混,被他怂恿实现了一遍平衡二叉树的插入和删除,所以对链表操作相对比较熟悉。

核心就是while循环操作

  // 核心
  var node = list; // 当前节点
  while(node) {    // 迭代链表
    node = node.tail;
    console.log(node.head);
  }

  // sub核心
  /**
    @params {List} L 链表
    @params {Number} start 开始的节点
    @params {Number} len 要获取的长度
  */
  var node = L;       // 当前节点
  var idx = 0;        // 迭代索引
  var length = 0;     // 截取的长度
  var newList = null; // 新的链表

  while(node) {       // 迭代链表
    var l = new List();
    l.head = node.head();
    if(idx >= start && length < len) {
        if(!newList) newList.head = l;
        else newList.tail = I;
    }
    node = node.tail;
    idx++;
  }

对于作业方面就不多说了,因为造成50+ commit的并不是作业本身,而是配置万恶的Travis-ciCoverage

话不多说了好不好,咱们直接开始脑交吧。

首先要先跑通karma,所以要先在package.json装上浏览器插件的依赖

如果对karma参数懵逼的同学可以看看中文注释

package.json:

  // 首先是package.json里面的开发依赖
  "devDependencies": {
      "othersDependencies": "*", // 其他依赖
      "karma-chrome-launcher": "^2.2.0",  // karma谷歌浏览器测试
      "karma-firefox-launcher": "^1.0.1", // karma火狐浏览器测试
  }

配置完成了以后在 终端命令行 npm install一遍,由于fork下来的作业本身已经完成初始化,我这里就不初始化karma了。

接下来是配置karma.conf.js
karma.conf.js:

module.exports = function(config) {
  const cfg = {
    // 其他配置
    othersConfig: '***',
    // karma需要测试的文件,应该是按执行顺序由上至下的顺序引入吧,猜的。
    // 虽然初始化已经把这里写好了,但还是当给自己记录一遍吧,毕竟第一次捣鼓karma,增强一下记忆。
    files: [
      'node_modules/should/should.js',
      'js/*.js',
      'quz/*.js',
      'test/*.js'
    ],
    // 引入刚刚在package.json依赖的插件
    plugins: [
      'karma-mocha', // 为什么刚刚package.json没有说装这个?因为作业本身就有了。。
      'karma-chrome-launcher',
      'karma-firefox-launcher'
    ],
    // 配置自动化测试浏览器,注意大小写,曾经在这里引发了好几次commit调试的血案(微笑)
    browsers: ['Firefox', 'Chrome'],
    // 其他配置
    othersConfig: '***'
  }
  config.set(cfg)
}
    

配置完pluginsbrowsers后,然后在终端命令行npm test or karma start

理论上karma就可以跑起来了。


接下来,该切入第一个主题了,配置Travis-ci,以及在github显示下边那个磨人的build passing小图标


还是那句,话不多说直接解剖。
首先我们要配置.travis.yml文件
.travis.yml
language: node_js
node_js:
  - "8"

sudo: required

addons:
  chrome: stable  // 多了这一行,添加chrome插件
  firefox: latest

before_script:
  - "export DISPLAY=:99.0"
  - "sh -e /etc/init.d/xvfb start"
  - sleep 3 # give xvfb some time to start

before_install:
  - npm install karma-cli -g

我回去看了一下作业最原始的状态,貌似我就新增了这一行,还有把node版本从6 -> 8了。

这里虽然只添加了一行,但是调试这个文件产生20多个commit这种事情,我真的不会乱说。

yaml语法,到karma引用测试不通过(当时还不会npm test在本地测试),到配置那个小图表build passing,可以说是一路电光带火花的调试了过来。

当时为了调试这个文件,专门去看一下yaml的语法,感觉就是把yaml格式转成json格式,具体转化可以看看这个网站自己调试一下。

回到正题上吧,这个文件给我的感觉就是travis-ci服务器自动执行的脚本配置,就是转化成json格式作为参数,上传到travis-ci服务器那边跑测试自动要运行的命令(咳咳,还是猜的)。

剩下的就是回到karma.conf.js配置:
karma.conf.js:

module.exports = function(config) {
  const cfg = {
    // 其他配置
    othersConfig: `***`,
    // 自定义运行装置
    customLaunchers: {
      ChromeHeadless: {
        base: 'Chrome',
        flags: ['--no-sandbox']
      },
      FirefoxHeadless: { 
        base: "Firefox", 
        flags: ["-headless"]
      }
    },
    // 如果在TRAVIS环境下,开启持续集成模式
    singleRun: process.env.TRAVIS,
    // 其他配置
    othersConfig: `***`
  }
  // 如果在TRAVIS环境下,就将启动浏览器改成*Headless的浏览器(注释)
  if (process.env.TRAVIS) {
    cfg.browsers = ["ChromeHeadless", 'FirefoxHeadless'];
  }
  config.set(cfg)
}

注释:*Headless浏览器,我也只是道听途说,这种是谷歌和火狐出的一种无界面浏览器,类似于PhantomJS

因为我们要在Travis-CI上运行测试,所以要用无界面的浏览器跑程序,上面的代码就判断了在Travis-ci服务器环境下,就跑*Headless浏览器。

到这里基本配完了,然后到https://www.travis-ci.org链接自己github的项目。

接下来就是git add -Agit commit -m "update"git push origin master:master一波流了。

提交完毕后可以看到自己项目在Travis-CI上跑了,照着以上的配置多半是可以passed的。

不管passed还是failed,先把小图标加上:


点击红框的位置,第2个select框打开,选择markdown,复制最下面textarea文本框里面的内容到你项目的Readme.md文件的顶部,再 git push 一波,完成。

接下来就是coverage了,这个结果比较简单,但是过程依旧是血泪史,过程就不说了,10多个commit的调试吧…


还是老套路https://coverage.io链接自己的github项目。
继续配置package.json
package.json:

"devDependencies": {
    "karma-coverage": "*",
    "mocha-lcov-reporter": "*", // 这个报告不知道要不要装,赶时间没有去测试
}

karma.conf.js:

plugins: [
    'karma-mocha',
    'karma-chrome-launcher',
    'karma-firefox-launcher',
    'karma-coverage' // 添加对依赖插件的引用
],
// 添加预处理
preprocessors: { 
    "js/*.js": "coverage",
    "quz/*.js": "coverage",
    "test/*.js": "coverage"
},
// 报告加上coverage
reporters: ['progress', 'coverage'],
coverageReporter: {
    type: "lcov",
    dir: "coverage/"
}

这里的reporters其实我都不太理解,但是没时间了就不管了哈哈哈哈哈,该简化的地方都简化的7788了。
加完以后就可以开始提交到githubTravis-ci

跑完以后到coverage上看项目:

点击红色框,拿到markdown,放到Readme.md文件中
基本完成了,但是之前拷贝的这个coveragemarkdown貌似不会随着测试覆盖率的更新而改变百分比。

我原本是46%,但是coverage里面已经100%了,我这里还是不会改变。

最后我重新copy了一次100%markdown小图标才刷新了。


附上一张完成作品的帅照:


相关文章

网友评论

    本文标题:第一周

    本文链接:https://www.haomeiwen.com/subject/ygnszxtx.html