Node.js环境下Koa2添加travis ci持续集成工具的方法


Posted in Javascript onJune 19, 2017

前言

因为最近使用koa2做项目测试开发,所以想整合下travis ci,网上资料也比较少,于是自己就整了个,做个记录。分享出来供大家参考学习,下面来看看详细的介绍吧。

方法如下:

先来看下travis.yml的配置

language: node_js
node_js:
 - "6"
before_script:
 - ./node_modules/.bin/knex migrate:latest --knexfile='./app/knexfile.js'
script:
 - npm run test

因为是接口测试,所以首先需要做表创建等操作。

测试的命令:

NODE_ENV=production NODE_CONFIG_DIR='./app/config/' ./node_modules/.bin/mocha --require 'babel-polyfill' --compilers js:babel-register ./app/test/**/*.js

主要是测试这里,使用了supertest,大概看下是如何调用的。

const request = require('supertest');
const should = require('should');
const index = require('../../index');

let app = request(index.listen());

describe('/api/persons', function() {
 let personId;

 it('POST /api/persons - create person success and respond with 200', function(done) {
 app.post('/api/persons')
  .send({
  'firstName': 'Jennifer',
  'lastName': 'Lawrence',
  'age': 24
  })
  .expect(200)
  .expect(function(res) {
  (res.body.id > 0).should.be.true;
  })
  .end(function(err, res) {
  if (err) {
   return done(err);
  }

  let resJson = JSON.parse(res.text);
  personId = resJson.id;

  done();
  })
 });

 it('GET /api/persons - fetch persons item', function(done) {
 app.get('/api/persons')
  .expect(200)
  .expect(function(res) {
  (res.body.length > 0).should.be.true;
  })
  .end(function(err, res) {
  if (err) {
   return done(err);
  }

  done();
  })
 });

 it('GET /api/persons/:id - fetch a person', function(done) {
 app.get(`/api/persons/${personId}`)
  .expect(200)
  .expect(function(res) {
  (res.body.id == personId).should.be.true;
  })
  .end(function(err, res) {
  if (err) {
   return done(err);
  }

  done();
  })
 });

 it('DELETE /api/persons/:id - delete a person', function(done) {
 app.delete(`/api/persons/${personId}`)
  .expect(200)
  .end(function(err, res) {
  if (err) {
   return done(err);
  }

  done();
  })
 });

 it('GET /api/persons/:id - fetch a person should 404', function(done) {
 app.get(`/api/persons/${personId}`)
  .expect(404)
  .end(function(err, res) {
  if (err) {
   return done(err);
  }

  done();
  })
 });

});

这里主要注意的是

const index = require('../../index');

需要将koa实例暴漏出来,不然在做travis ci的集成后,启动了项目,测试的时候依然找不到具体访问地址。

来看下我的index.js

import Knex from 'knex';
import {
 Model
} from 'objection';
import knexConfig from './knexfile';
import config from 'config';
import Koa from 'koa';
import koaLogger from 'koa-logger';
import bodyParser from 'koa-bodyparser';
import render from 'koa-ejs';
import co from 'co';
import koaStatic from "koa2-static"
import router from './router';

const path = require('path');

// initial knex
const knex = Knex(knexConfig.development);
Model.knex(knex);

// initial app
const app = new Koa();

// initial render
render(app, {
 root: path.join(__dirname + '/view'),
 layout: 'template',
 viewExt: 'ejs',
 cache: true,
 debug: true
});
app.context.render = co.wrap(app.context.render);

// initial static

app.use(koaLogger())
 .use(bodyParser())
 .use(router.routes())
 .use(koaStatic({
 path: '/web',
 root: __dirname + "/../static"
 }));

module.exports = app;

需要注意的是这里的

module.exports = app;

暴漏出来,再supertest中才可以独立启动server测试。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
mapper--图片热点区域高亮组件官方站点
Dec 22 Javascript
js加解密 脚本解密
Feb 22 Javascript
js中的for如何实现foreach中的遍历
May 31 Javascript
js生成随机数(指定范围)的实例代码
Jul 10 Javascript
js时间比较 js计算时间差的简单实现方法
Aug 26 Javascript
Javascript实现汉字和拼音互转的终极方案
Oct 19 Javascript
JS创建Tag标签的方法详解
Jun 09 Javascript
Vue.js弹出模态框组件开发的示例代码
Jul 26 Javascript
React学习笔记之高阶组件应用
Jun 02 Javascript
详解Webpack多环境代码打包的方法
Aug 03 Javascript
JavaScript的级联函数用法简单示例【链式调用】
Mar 26 Javascript
jquery实现Ajax请求的几种常见方式总结
May 28 jQuery
Node.js中 __dirname 的使用介绍
Jun 19 #Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
Jun 19 #Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
Jun 19 #Javascript
jQuery自定义多选下拉框效果
Jun 19 #jQuery
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
Jun 19 #Javascript
JS仿淘宝搜索框用户输入事件的实现
Jun 19 #Javascript
jQuery实现下拉菜单的实例代码
Jun 19 #jQuery
You might like
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
JQuery动画和停止动画实例代码
2013/03/01 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
Angular的自定义指令以及实例
2016/12/26 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
python 正则式使用心得
2009/05/07 Python
python 打印对象的所有属性值的方法
2016/09/11 Python
Python实现模拟分割大文件及多线程处理的方法
2017/10/10 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
django有哪些好处和优点
2020/09/01 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
c++工程师面试问题
2013/08/04 面试题
董事长职责范文
2013/11/08 职场文书
大学毕业生通用自我评价
2014/01/05 职场文书
运动会入场解说词300字
2014/01/25 职场文书
安全标语口号
2014/06/09 职场文书
2014年秋季新学期寄语
2014/08/02 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
环卫工人慰问信
2015/02/15 职场文书
英语通知范文
2015/04/22 职场文书
校园新闻稿范文
2015/07/18 职场文书
趣味运动会简讯
2015/07/20 职场文书
放假通知怎么写
2015/08/18 职场文书