mirror of
https://github.com/typicode/json-server.git
synced 2025-07-28 12:43:18 +08:00
Refactor CLI and add tests
This commit is contained in:
123
test/cli/index.js
Normal file
123
test/cli/index.js
Normal file
@ -0,0 +1,123 @@
|
||||
var os = require('os')
|
||||
var fs = require('fs')
|
||||
var path = require('path')
|
||||
var cp = require('child_process')
|
||||
var request = require('supertest')
|
||||
var rmrf = require('rimraf')
|
||||
var pkg = require('../../package.json')
|
||||
|
||||
request = request('http://localhost:3000')
|
||||
|
||||
var tmpDir = path.join(__dirname, '../../tmp')
|
||||
var dbFile = path.join(tmpDir, 'db.json')
|
||||
var routesFile = path.join(tmpDir, 'routes.json')
|
||||
|
||||
function cli (args) {
|
||||
var bin = path.join(__dirname, '../..', pkg.bin)
|
||||
return cp.spawn('node', [bin].concat(args), {
|
||||
stdio: 'inherit',
|
||||
cwd: __dirname
|
||||
})
|
||||
}
|
||||
|
||||
/* global beforeEach, afterEach, describe, it */
|
||||
|
||||
describe('cli', function () {
|
||||
|
||||
var child
|
||||
|
||||
beforeEach(function () {
|
||||
fs.mkdirSync(tmpDir)
|
||||
fs.writeFileSync(dbFile, JSON.stringify({ posts: [] }))
|
||||
fs.writeFileSync(routesFile, JSON.stringify({ '/blog/': '/' }))
|
||||
})
|
||||
|
||||
afterEach(function (done) {
|
||||
rmrf.sync(tmpDir)
|
||||
child.kill()
|
||||
setTimeout(done, 1000)
|
||||
})
|
||||
|
||||
describe('db.json', function () {
|
||||
|
||||
beforeEach(function (done) {
|
||||
child = cli([dbFile])
|
||||
setTimeout(done, 1000)
|
||||
})
|
||||
|
||||
it('should support JSON dbFile', function (done) {
|
||||
request.get('/posts').expect(200, done)
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
describe('seed.js', function () {
|
||||
|
||||
beforeEach(function (done) {
|
||||
child = cli(['fixtures/seed.js'])
|
||||
setTimeout(done, 1000)
|
||||
})
|
||||
|
||||
it('should support JS file', function (done) {
|
||||
request.get('/posts').expect(200, done)
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
describe('http://jsonplaceholder.typicode.com/db', function () {
|
||||
|
||||
beforeEach(function (done) {
|
||||
this.timeout(6000)
|
||||
child = cli(['http://jsonplaceholder.typicode.com/db'])
|
||||
setTimeout(done, 5000)
|
||||
})
|
||||
|
||||
it('should support URL file', function (done) {
|
||||
request.get('/posts').expect(200, done)
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
describe('db.json -r routes.json', function () {
|
||||
|
||||
beforeEach(function (done) {
|
||||
child = cli([dbFile, '-r', routesFile])
|
||||
setTimeout(done, 1000)
|
||||
})
|
||||
|
||||
it('should use routes.json', function (done) {
|
||||
request.get('/blog/posts').expect(200, done)
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
// FIXME test fails on OS X and maybe on Windows
|
||||
// But manually updating db.json works...
|
||||
if (os.platform() === 'linux') {
|
||||
describe('--watch db.json -r routes.json', function () {
|
||||
|
||||
beforeEach(function (done) {
|
||||
child = cli(['--watch', dbFile, '-r', routesFile])
|
||||
setTimeout(done, 1000)
|
||||
})
|
||||
|
||||
it('should watch db file', function (done) {
|
||||
fs.writeFileSync(dbFile, JSON.stringify({ foo: [] }))
|
||||
setTimeout(function () {
|
||||
request.get('/foo').expect(200, done)
|
||||
}, 1000)
|
||||
})
|
||||
|
||||
it('should watch routes file', function (done) {
|
||||
// Can be very slow
|
||||
this.timeout(10000)
|
||||
fs.writeFileSync(routesFile, JSON.stringify({ '/api/': '/' }))
|
||||
setTimeout(function () {
|
||||
request.get('/api/posts').expect(200, done)
|
||||
}, 9000)
|
||||
})
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
})
|
Reference in New Issue
Block a user