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中判断对象类型的几种方法总结
Nov 11 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
Dec 26 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
Feb 07 Javascript
浅谈JavaScript Date日期和时间对象
Dec 29 Javascript
javascript实现自动填写表单实例简析
Dec 02 Javascript
谈一谈javascript闭包
Jan 28 Javascript
ES6学习教程之对象的扩展详解
May 02 Javascript
Vuejs中使用markdown服务器端渲染的示例
Nov 22 Javascript
vue项目部署上线遇到的问题及解决方法
Jun 10 Javascript
JavaScript常用8种数组去重代码实例
Sep 09 Javascript
微信小程序实现拼图小游戏
Oct 22 Javascript
手写Spirit防抖函数underscore和节流函数lodash
Mar 22 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
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
thinkphp实现多语言功能(语言包)
2014/03/04 PHP
jquery获取自定义属性(attr和prop)实例介绍
2013/04/21 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
Python手机号码归属地查询代码
2016/05/04 Python
Python随机读取文件实现实例
2017/05/25 Python
python 同时运行多个程序的实例
2019/01/07 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
python 模拟银行转账功能过程详解
2019/08/06 Python
python每天定时运行某程序代码
2019/08/16 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
潘多拉珠宝英国官方网上商店:PANDORA英国
2018/06/12 全球购物
在校生党员自我评价
2013/09/25 职场文书
婚礼证婚人证婚词
2014/01/08 职场文书
高中军训广播稿
2014/01/14 职场文书
打架检讨书2000字
2014/02/22 职场文书
故宫的导游词
2015/01/31 职场文书
整改通知书
2015/04/20 职场文书
三八节活动主持词
2015/07/04 职场文书
区域销售大会开幕词
2016/03/04 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript