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 相关文章推荐
javascript模拟的Ping效果代码 (Web Ping)
Mar 13 Javascript
判断是否安装flash player及当前版本的JS代码
Aug 08 Javascript
深入理解javascript动态插入技术
Nov 12 Javascript
实例讲解JS中数组Array的操作方法
May 09 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
Aug 31 Javascript
微信小程序 条件渲染详解
Oct 09 Javascript
js实现自定义进度条效果
Mar 15 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
Aug 18 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
Dec 03 Javascript
JavaScript页面加载事件实例讲解
Sep 01 Javascript
微信小程序订阅消息(java后端实现)开发
Jun 01 Javascript
JS实现九宫格拼图游戏
Jun 28 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调用Twitter的RSS的实现代码
2010/03/10 PHP
php支付宝接口用法分析
2015/01/04 PHP
php-redis中的sort排序函数总结
2015/07/08 PHP
PHP实现删除字符串中任何字符的函数
2015/08/11 PHP
php注册登录系统简化版
2020/12/28 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
引用外部脚本时script标签关闭的写法
2014/01/20 Javascript
js创建对象的方式总结
2015/01/10 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
微信小程序自定义联系人弹窗
2020/05/26 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
python如何制作缩略图
2019/04/30 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
运动会闭幕式解说词
2014/02/21 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
运动会1000米加油稿
2015/07/21 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
导游词之井冈山
2019/11/20 职场文书
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android