前言
因为最近使用 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 测试。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
来源: http://www.jb51.net/article/116570.htm