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 相关文章推荐
接收键盘指令的脚本
Jun 26 Javascript
Javascript实例教程(19) 使用HoTMetal(4)
Dec 23 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
Jun 19 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
Mar 13 Javascript
JavaScript制作windows经典扫雷小游戏
Mar 31 Javascript
JavaScript更改字符串的大小写
May 07 Javascript
jQuery同步提交示例代码
Dec 12 Javascript
Bootstrap popover用法详解
Dec 22 Javascript
jquery插件开发之选项卡制作详解
Aug 30 jQuery
JQuery实现简单的复选框树形结构图示例【附源码下载】
Jul 16 jQuery
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
Aug 06 Javascript
Vue实现随机验证码功能
Dec 29 Vue.js
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中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
用javascript实现计算两个日期的间隔天数
2007/08/14 Javascript
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
jquery radio 操作代码
2011/03/16 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
Vuex提升学习篇
2018/01/11 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
JavaScript原型式继承实现方法
2019/11/06 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[57:12]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第一场 10.31
2020/11/02 DOTA
Python之文字转图片方法
2018/05/10 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
2020/01/20 Python
浅析Python中字符串的intern机制
2020/10/03 Python
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
纬创Java面试题笔试题
2014/10/02 面试题
如何安装ruby on rails
2014/02/09 面试题
物流专业大学应届生求职信
2013/11/03 职场文书
酒店保安领班职务说明书
2014/03/04 职场文书
学校节能减排方案
2014/06/13 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
党委书记个人检查对照材料思想汇报
2014/10/11 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
单位工作证明范本
2015/06/15 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python