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 相关文章推荐
解读IE和firefox下JScript和HREF的执行顺序
Jan 12 Javascript
文本框的字数限制功能jquery插件
Nov 24 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
Jul 05 Javascript
javascript设置和获取cookie的方法实例详解
Jan 05 Javascript
jQuery select自动选中功能实现方法分析
Nov 28 Javascript
谈谈Vue.js——vue-resource全攻略
Jan 16 Javascript
JavaScript实现精美个性导航栏筋斗云效果
Oct 29 Javascript
JavaScript继承与多继承实例分析
May 26 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
May 31 Javascript
webpack打包优化的几个方法总结
Feb 10 Javascript
JS面试题中深拷贝的实现讲解
May 07 Javascript
react项目从新建到部署的实现示例
Feb 19 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使用codebase生成随机数
2014/03/25 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
smarty简单入门实例
2014/11/28 PHP
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
vue项目实现github在线预览功能
2018/06/20 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
python使用socket连接远程服务器的方法
2015/04/29 Python
Python实现约瑟夫环问题的方法
2016/05/03 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
python处理multipart/form-data的请求方法
2018/12/26 Python
python烟花效果的代码实例
2020/02/25 Python
python 错误处理 assert详解
2020/04/20 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
Java如何读取CLOB字段
2013/10/10 面试题
数学教学随笔感言
2014/02/17 职场文书
个人总结与自我评价
2014/09/18 职场文书
颐和园导游词400字
2015/01/30 职场文书
出国留学英文自荐信
2015/03/25 职场文书
实验心得体会范文
2016/01/25 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
mybatis调用sqlserver存储过程返回结果集的方法
2021/05/08 SQL Server
Java集成swagger文档组件
2021/06/28 Java/Android
python缺失值填充方法示例代码
2022/12/24 Python