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 相关文章推荐
CheckBox 如何实现全选?
Jun 23 Javascript
两个DIV等高的JS的实现代码
Dec 23 Javascript
jQuery入门问答 整理的几个常见的初学者问题
Feb 22 Javascript
使用iframe window的scroll方法控制iframe页面滚动
Mar 05 Javascript
jQuery 删除/替换DOM元素的几种方式
May 20 Javascript
node.js中的querystring.parse方法使用说明
Dec 10 Javascript
JavaScript绑定事件监听函数的通用方法
May 14 Javascript
js实现鼠标左右移动,图片也跟着移动效果
Jan 25 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
Feb 14 Javascript
JS中SetTimeout和SetInterval使用初探
Mar 23 Javascript
AngularJS实现controller控制器间共享数据的方法示例
Oct 30 Javascript
详解Vue源码中一些util函数
Apr 24 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 JSON中文乱码的解决方法详解
2013/06/06 PHP
php二维数组转成字符串示例
2014/02/17 PHP
php实现读取超大文件的方法
2014/07/28 PHP
PHP的几个常用加密函数
2016/02/03 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
layui导航栏实现代码
2017/05/19 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
详解ES6中的代理模式——Proxy
2018/01/08 Javascript
浅谈Vue响应式(数组变异方法)
2018/05/07 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
英语硕士生求职简历的自我评价
2013/10/15 职场文书
应届实习生的自我评价范文
2014/01/05 职场文书
数控个人求职信范文
2014/02/03 职场文书
驾驶员培训方案
2014/05/01 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
工作时间擅自离岗检讨书
2014/10/24 职场文书
音乐课外活动总结
2015/05/09 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
运动会广播稿100字
2015/08/19 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书
JavaWeb 入门篇(3)ServletContext 详解 具体应用
2021/07/16 Java/Android