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 相关文章推荐
ExtJS[Desktop]实现图标换行示例代码
Nov 17 Javascript
javascript创建数组之联合数组的使用方法示例
Dec 26 Javascript
浅析BootStrap栅格系统
Jun 07 Javascript
jQuery自定义数值抽奖活动代码
Jun 11 Javascript
BootStrap Typeahead自动补全插件实例代码
Aug 10 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
Oct 31 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
Apr 27 Javascript
微信小程序 选项卡的简单实例
May 24 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
Jul 05 Javascript
JS实现身份证输入框的输入效果
Aug 21 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
Mar 21 Javascript
详解ES6实现类的私有变量的几种写法
Feb 10 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
php中将数组存到文件里的实现代码
2012/01/19 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
2013/11/25 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
JavaScript实现简单随机点名器
2019/11/21 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
python结合API实现即时天气信息
2016/01/19 Python
Python数组遍历的简单实现方法小结
2016/04/27 Python
python中requests小技巧
2017/05/10 Python
Python自定义一个异常类的方法
2019/06/27 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
自动化专业毕业生自荐信
2013/11/01 职场文书
新闻学专业个人求职信写作
2014/02/04 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
人事经理岗位职责
2014/04/28 职场文书
上班迟到检讨书
2014/09/15 职场文书
幼师大班个人总结
2015/02/13 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
教师岗位说明书
2015/09/30 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技
java实现web实时消息推送的七种方案
2022/07/23 Java/Android