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中实现块作用域的方法
Apr 01 Javascript
最短的IE判断代码
Mar 13 Javascript
前端开发过程中浏览器版本的两种判定方法
Oct 30 Javascript
javascript框架设计读书笔记之数组的扩展与修复
Dec 02 Javascript
javascript实现切换td中的值
Dec 05 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
Mar 20 Javascript
基于javascript实现的购物商城商品倒计时实例
Dec 11 Javascript
Vue分页组件实例代码
Apr 17 Javascript
jQuery制作input提示内容(兼容IE8以上)
Jul 05 jQuery
nuxt.js写项目时增加错误提示页面操作
Nov 05 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
Nov 13 Javascript
详解JavaScript中的this指向问题
Feb 05 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
PL-880隐藏功能
2021/03/01 无线电
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
jquery键盘事件介绍
2011/01/31 Javascript
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
解决js函数闭包内存泄露问题的办法
2016/01/25 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
Django 路由控制的实现
2019/07/17 Python
Python调用Windows命令打印文件
2020/02/07 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书