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 相关文章推荐
js简易namespace管理器 实例代码
Jun 21 Javascript
JS实现距离上次刷新已过多少秒示例
May 23 Javascript
JQuery包裹DOM节点的方法
Jun 11 Javascript
基于javascript编写简单日历
May 02 Javascript
JavaScript事件学习小结(三)js事件对象
Jun 09 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
Mar 08 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
Sep 12 Javascript
Angular4学习笔记router的简单使用
Mar 30 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
Aug 27 Javascript
js canvas实现写字动画效果
Nov 30 Javascript
JS实现二维数组元素的排列组合运算简单示例
Jan 28 Javascript
基于Node.js搭建hexo博客过程详解
Jun 25 Javascript
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
咖啡与水的关系
2021/03/03 冲泡冲煮
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
JavaScript版代码高亮
2006/06/26 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
微信小程序 MD5的方法详解及实例代码
2017/03/10 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
js实现滑动滑块验证登录
2020/07/24 Javascript
JS实现放大镜效果
2020/09/21 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
Python设置默认编码为utf8的方法
2016/07/01 Python
Python 3中的yield from语法详解
2017/01/18 Python
python定义类self用法实例解析
2020/01/22 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
2020/06/01 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
canvas版人体时钟的实现示例
2021/01/29 HTML / CSS
科学发展观演讲稿
2014/09/11 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
人大代表选举标语
2014/10/07 职场文书
会计求职信怎么写
2015/03/20 职场文书
员工家属慰问信
2015/03/24 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
雄兵连:第三季先行图公开,天使恶魔联合,银河之力的新力量
2021/06/11 国漫
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技