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 相关文章推荐
XP折叠菜单&仿QQ2006菜单
Dec 16 Javascript
JavaScript通过RegExp实现客户端验证处理程序
May 07 Javascript
谈谈JavaScript中function多重理解
Aug 28 Javascript
快速学习jQuery插件 Cookie插件使用方法
Dec 01 Javascript
JS动态改变浏览器标题的方法
Apr 06 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
Jun 01 Javascript
js判断checkbox是否选中个数的方法(超简单)
Aug 19 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
Jan 12 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
Oct 13 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
Jun 25 Javascript
vue操作动画的记录animate.css实例代码
Apr 26 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
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计算整个目录大小的方法
2015/06/01 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
用JavaScript隐藏控件的方法
2009/09/21 Javascript
json 入门基础教程 推荐
2009/10/31 Javascript
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
Python利用sqlacodegen自动生成ORM实体类示例
2019/06/04 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
python对数组进行排序,并输出排序后对应的索引值方式
2020/02/28 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
localStorage 设置过期时间的方法实现
2018/12/21 HTML / CSS
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
全球在线商店:BerryLook
2019/04/14 全球购物
竞聘副主任科员演讲稿
2014/01/11 职场文书
英语国培研修感言
2014/02/13 职场文书
树转促学习心得体会
2014/09/10 职场文书
财政局个人总结
2015/03/04 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
MySQL创建管理LIST分区
2022/04/13 MySQL