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 计算两个整数的百分比值
Dec 26 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
Apr 02 Javascript
jQuery中复合属性选择器用法实例
Dec 31 Javascript
JavaScript实现图片轮播的方法
Jul 31 Javascript
JavaScript如何实现组合列表框中元素移动效果
Mar 01 Javascript
jquery日历插件e-calendar升级版
Nov 10 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
Dec 12 Javascript
angular+ionic返回上一页并刷新页面
Aug 08 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
Feb 22 Javascript
Vuex 使用及简单实例(计数器)
Aug 29 Javascript
js实现自动播放匀速轮播图
Feb 06 Javascript
linux服务器快速卸载安装node环境(简单上手)
Feb 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
文章推荐系统(二)
2006/10/09 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
PHP中soap的用法实例
2014/10/24 PHP
typecho插件编写教程(三):保存配置
2015/05/28 PHP
PHP获取路径和目录的方法总结【必看篇】
2017/03/04 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
基于PHP实现用户登录注册功能的详细教程
2020/08/04 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
犀利的js 函数集合
2009/06/11 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
推荐下python/ironpython:从入门到精通
2007/10/02 Python
从零学python系列之从文件读取和保存数据
2014/05/23 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
django实现模型字段动态choice的操作
2020/04/01 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
计算机应用毕业生自荐信
2013/10/23 职场文书
个人函授自我鉴定
2014/03/25 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫