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 相关文章推荐
jQuery控制图片的hover效果(smartRollover.js)
Mar 18 Javascript
js跑步算法的实现代码
Dec 04 Javascript
javascript 3d 逐侦产品展示(核心精简)
Mar 26 Javascript
Javascript让DEDECMS告别手写Tag
Sep 01 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
Oct 08 Javascript
JavaScript中实现Map的示例代码
Sep 09 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
Dec 26 Javascript
jQuery实现邮箱下拉列表自动补全功能
Sep 08 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
May 23 jQuery
5分钟快速掌握JS中var、let和const的异同
Sep 19 Javascript
浅析js中mvvm模式实现的原理
Oct 06 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
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实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
用javascript自动显示最后更新时间
2007/03/15 Javascript
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
JavaScript去掉空格的方法集合
2010/12/28 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
2017/01/12 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
微信小程序商城项目之侧栏分类效果(1)
2017/04/17 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python 调用c语言函数的方法
2017/09/29 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
pandas数据拼接的实现示例
2020/04/16 Python
python中元组的用法整理
2020/06/15 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
接口中的方法可以是abstract的吗
2015/07/23 面试题
Python如何定义一个函数
2015/09/01 面试题
工作能力自我评价2015
2015/03/05 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书
行为规范主题班会
2015/08/13 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
详解分布式系统中如何用python实现Paxos
2021/05/18 Python
PO模式在selenium自动化测试框架的优势
2022/03/20 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
2022/05/30 Python