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 相关文章推荐
prototype 1.5相关知识及他人笔记
Dec 16 Javascript
extjs中form与grid交互数据(record)的方法
Aug 29 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
May 22 Javascript
探讨js字符串数组拼接的性能问题
Oct 11 Javascript
AngularJS教程之MVC体系结构详解
Aug 16 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
Jan 11 Javascript
JavaScript基本类型值-Number类型
Feb 24 Javascript
用js屏蔽被http劫持的浮动广告实现方法
Aug 10 Javascript
JavaScript事件处理程序详解
Sep 19 Javascript
vue js秒转天数小时分钟秒的实例代码
Aug 08 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
Mar 29 Javascript
微信小程序获取用户绑定手机号方法示例
Jul 21 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
thinkphp中memcache的用法实例
2014/11/29 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
PHP中->和=>的含义及使用示例解析
2020/08/06 PHP
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
档案接收函范文
2014/01/10 职场文书
庆元旦广播稿
2014/02/10 职场文书
公司担保书格式范文
2014/05/12 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
2015元旦标语横幅
2014/12/09 职场文书
复活读书笔记
2015/06/29 职场文书
golang特有程序结构入门教程
2021/06/02 Python