Skip to content

Commit 0788e46

Browse files
committed
test: add unit/integration tests (#39)
1 parent 498c951 commit 0788e46

35 files changed

+1205
-4
lines changed

.npmignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,6 @@ gulpfile.babel.js
1515
# logs
1616
/log
1717
npm-debug.log
18+
19+
# tests
20+
/test

.travis.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
language: node_js
2+
3+
node_js:
4+
- "5"
5+
6+
services:
7+
- mysql
8+
9+
before_script:
10+
- cat test/fixtures/data.sql | mysql -u travis
11+
- npm install -g gulp
12+
- npm install -g lux-framework
13+
14+
env:
15+
- NODE_ENV="test"

README.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Lux
22

3-
[![Join the chat at https://gitter.im/postlight/lux](https://badges.gitter.im/postlight/lux.svg)](https://gitter.im/postlight/lux?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
3+
[![Build Status](https://travis-ci.org/postlight/lux.svg?branch=master)](https://travis-ci.org/postlight/lux) [![Join the chat at https://gitter.im/postlight/lux](https://badges.gitter.im/postlight/lux.svg)](https://gitter.im/postlight/lux?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
44

55
A MVC style framework for building highly performant, large scale JSON APIs that anybody who knows the JavaScript language and its modern features will understand.
66

@@ -159,8 +159,15 @@ npm install
159159

160160
### Testing
161161

162-
Coming Soon!
162+
```bash
163+
git clone https://github.com/postlight/lux
164+
cd lux
165+
npm install
166+
cat test/fixtures/data.sql | mysql -u root -p
167+
npm test
168+
```
163169

170+
*Note:* Make sure you have MySQL installed and accessible on port `3306`.
164171

165172
## Useful Links
166173

gulpfile.babel.js

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import gulp from 'gulp';
22
import babel from 'gulp-babel';
3+
import mocha from 'gulp-mocha';
34
import eslint from 'gulp-eslint';
45
import uglify from 'gulp-uglify';
56

7+
import exec from './src/packages/cli/utils/exec';
68
import rmrf from './src/packages/cli/utils/rmrf';
79

810
gulp.task('clean', () => {
@@ -16,11 +18,36 @@ gulp.task('build', ['lint', 'clean'], () => {
1618
.pipe(gulp.dest('dist'));
1719
});
1820

21+
gulp.task('build:test', ['build'], () => {
22+
return exec('npm install', {
23+
cwd: `${__dirname}/test/test-app`
24+
});
25+
});
26+
1927
gulp.task('lint', () => {
2028
return gulp.src('src/**/*.js')
2129
.pipe(eslint())
2230
.pipe(eslint.format())
2331
.pipe(eslint.failAfterError());
2432
});
2533

26-
gulp.task('default', ['lint']);
34+
gulp.task('test', ['build:test'], () => {
35+
return gulp.src([
36+
'test/helper.js',
37+
'test/unit/**/*.js',
38+
'test/integration/**/*.js'
39+
], { read: false })
40+
.pipe(
41+
mocha({
42+
bail: true,
43+
timeout: 600000,
44+
require: [
45+
'babel-core/register'
46+
]
47+
})
48+
)
49+
.once('error', () => process.exit(1))
50+
.once('end', () => process.exit());
51+
});
52+
53+
gulp.task('default', ['build']);

package.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99
},
1010
"scripts": {
1111
"start": "lux serve",
12-
"test": "lux test"
12+
"test": "gulp test"
1313
},
1414
"author": "Zachary Golba",
1515
"license": "MIT",
16+
"engines": {
17+
"node": ">= 4.0"
18+
},
1619
"dependencies": {
1720
"ansi-regex": "2.0.0",
1821
"babel-runtime": "6.6.1",
@@ -31,11 +34,15 @@
3134
"babel-plugin-transform-runtime": "6.6.0",
3235
"babel-preset-es2015": "6.6.0",
3336
"babel-preset-stage-1": "6.5.0",
37+
"chai": "3.5.0",
3438
"eslint": "2.7.0",
3539
"gulp": "3.9.1",
3640
"gulp-babel": "6.1.2",
3741
"gulp-eslint": "2.0.0",
42+
"gulp-mocha": "2.2.0",
3843
"gulp-uglify": "1.5.3",
44+
"isomorphic-fetch": "2.2.1",
45+
"mocha": "2.4.5",
3946
"mysql": "2.10.2"
4047
}
4148
}

test/fixtures/data.sql

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
DROP DATABASE IF EXISTS `lux_test`;
2+
CREATE DATABASE `lux_test` /*!40100 DEFAULT CHARACTER SET utf8 */;
3+
USE `lux_test`;
4+
-- MySQL dump 10.13 Distrib 5.6.24, for osx10.8 (x86_64)
5+
--
6+
-- Host: 127.0.0.1 Database: lux_test
7+
-- ------------------------------------------------------
8+
-- Server version 5.7.11
9+
10+
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
11+
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
12+
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
13+
/*!40101 SET NAMES utf8 */;
14+
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
15+
/*!40103 SET TIME_ZONE='+00:00' */;
16+
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
17+
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
18+
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
19+
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
20+
21+
--
22+
-- Table structure for table `author`
23+
--
24+
25+
DROP TABLE IF EXISTS `author`;
26+
/*!40101 SET @saved_cs_client = @@character_set_client */;
27+
/*!40101 SET character_set_client = utf8 */;
28+
CREATE TABLE `author` (
29+
`id` int(11) NOT NULL AUTO_INCREMENT,
30+
`created_at` datetime DEFAULT NULL,
31+
`updated_at` datetime DEFAULT NULL,
32+
`name` varchar(255) DEFAULT NULL,
33+
PRIMARY KEY (`id`)
34+
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
35+
/*!40101 SET character_set_client = @saved_cs_client */;
36+
37+
--
38+
-- Dumping data for table `author`
39+
--
40+
41+
LOCK TABLES `author` WRITE;
42+
/*!40000 ALTER TABLE `author` DISABLE KEYS */;
43+
INSERT INTO `author` VALUES (1,'2016-04-16 19:02:28','2016-04-16 19:02:28','New Author 1'),(2,'2016-04-16 19:02:31','2016-04-16 19:02:31','New Author 2');
44+
/*!40000 ALTER TABLE `author` ENABLE KEYS */;
45+
UNLOCK TABLES;
46+
47+
--
48+
-- Table structure for table `post`
49+
--
50+
51+
DROP TABLE IF EXISTS `post`;
52+
/*!40101 SET @saved_cs_client = @@character_set_client */;
53+
/*!40101 SET character_set_client = utf8 */;
54+
CREATE TABLE `post` (
55+
`id` int(11) NOT NULL AUTO_INCREMENT,
56+
`created_at` datetime DEFAULT NULL,
57+
`updated_at` datetime DEFAULT NULL,
58+
`title` varchar(255) DEFAULT NULL,
59+
`body` varchar(255) DEFAULT NULL,
60+
`is_public` tinyint(1) DEFAULT '0',
61+
`author_id` int(11) DEFAULT NULL,
62+
PRIMARY KEY (`id`)
63+
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8;
64+
/*!40101 SET character_set_client = @saved_cs_client */;
65+
66+
--
67+
-- Dumping data for table `post`
68+
--
69+
70+
LOCK TABLES `post` WRITE;
71+
/*!40000 ALTER TABLE `post` DISABLE KEYS */;
72+
INSERT INTO `post` VALUES (1,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 1','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(2,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 2','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(3,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 5','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(4,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 3','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(5,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 6','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(6,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 4','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(7,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 7','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(8,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 12','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(9,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 11','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(10,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 10','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(11,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 8','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(12,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 9','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(13,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 13','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(14,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 14','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(15,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 15','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(16,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 17','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(17,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 16','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(18,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 19','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(19,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 18','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(20,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 20','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(21,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 23','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(22,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 22','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(23,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 21','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(24,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 24','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(25,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 25','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,1),(26,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 26','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(27,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 27','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(28,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 29','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(29,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 28','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(30,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 31','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(31,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 30','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(32,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 34','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(33,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 35','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(34,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 32','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(35,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 33','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(36,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 36','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(37,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 39','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(38,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 40','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(39,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 41','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(40,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 37','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(41,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 38','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(42,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 42','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(43,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 43','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(44,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 48','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(45,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 46','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(46,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 45','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(47,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 44','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(48,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 47','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(49,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 49','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2),(50,'2016-04-16 19:00:53','2016-04-16 19:10:04','New Post 50','Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',1,2);
73+
/*!40000 ALTER TABLE `post` ENABLE KEYS */;
74+
UNLOCK TABLES;
75+
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
76+
77+
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
78+
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
79+
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
80+
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
81+
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
82+
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
83+
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
84+
85+
-- Dump completed on 2016-04-18 18:20:06

test/helper.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import os from 'os';
2+
import path from 'path';
3+
import { spawn } from 'child_process';
4+
5+
import Promise from 'bluebird';
6+
7+
let app;
8+
9+
before(done => {
10+
const testApp = path.join(__dirname, 'test-app');
11+
12+
app = spawn('lux', ['serve'], {
13+
cwd: testApp,
14+
env: {
15+
...process.env,
16+
PWD: testApp
17+
}
18+
});
19+
20+
app.once('error', done);
21+
22+
app.stdout.setEncoding('utf8');
23+
app.stderr.setEncoding('utf8');
24+
25+
app.stdout.on('data', data => {
26+
const isListening = /^.+listening\son\sport\s\d+\n$/g.test(data);
27+
28+
if (isListening) {
29+
done();
30+
}
31+
});
32+
33+
app.stderr.once('data', err => {
34+
err = new Error(err);
35+
done(err);
36+
});
37+
});
38+
39+
after(() => {
40+
if (app) {
41+
app.kill();
42+
}
43+
});

0 commit comments

Comments
 (0)