memserver
Version:
in-memory database/ORM and http mock server you can run in-browser and node environments. Built for large frontend teams, fast tests and rapid prototyping
137 lines (108 loc) • 3.7 kB
JavaScript
const assert = require('assert');
const fs = require('fs');
const rimraf = require('rimraf');
const modelFileContent = `import Model from '${process.cwd()}/lib/model';
export default Model({});`;
describe('MemServer.Response Interface', function() {
before(function(done) {
fs.mkdirSync(`./memserver`);
fs.mkdirSync(`./memserver/models`);
fs.writeFileSync(`${process.cwd()}/memserver/models/photo.js`, modelFileContent);
fs.writeFileSync(`${process.cwd()}/memserver/models/user.js`, modelFileContent);
fs.writeFileSync(`${process.cwd()}/memserver/server.js`, `
export default function(Models) {
const { Photo } = Models;
this.get('/photos', () => {
const photos = Photo.findAll();
return { photos: Photo.serializer(photos) };
});
}`);
fs.mkdirSync(`./memserver/fixtures`);
fs.writeFileSync(`${process.cwd()}/memserver/fixtures/photos.js`, `export default [
{
id: 1,
name: 'Ski trip',
href: 'ski-trip.jpeg',
is_public: false
},
{
id: 2,
name: 'Family photo',
href: 'family-photo.jpeg',
is_public: true
},
{
id: 3,
name: 'Selfie',
href: 'selfie.jpeg',
is_public: false
}
];`);
fs.writeFileSync(`${process.cwd()}/memserver/fixtures/users.js`, `export default [
{
id: 1,
first_name: 'Izel',
last_name: 'Nakri'
}
]`);
done();
});
beforeEach(function() {
Object.keys(require.cache).forEach((key) => delete require.cache[key]);
});
after(function(done) {
if (fs.existsSync(`${process.cwd()}/memserver`)) {
rimraf.sync(`${process.cwd()}/memserver`);
}
done();
});
it('can be used outside the server file', function(done) {
this.timeout(5000);
const MemServer = require('../lib/index.js');
const Response = require('../lib/response.js').default;
MemServer.start();
window.$ = require('jquery');
const { Server } = MemServer;
const { Photo, User } = MemServer.Models;
Server.get('/users/:id', (request) => {
const user = User.find(Number(request.params.id));
if (user) {
return Response(200, { user: User.serializer(user) });
}
});
window.$.getJSON('/users/1', (data, textStatus, jqXHR) => {
assert.equal(jqXHR.status, 200);
assert.deepEqual(data, { user: { id: 1, first_name: 'Izel', last_name: 'Nakri' } });
done();
});
});
it('can be used inside the server file', function(done) {
this.timeout(5000);
const MemServer = require('../lib/index.js');
const Response = require('../lib/response.js').default;
MemServer.start();
window.$ = require('jquery');
const { Server } = MemServer;
const { Photo, User } = MemServer.Models;
window.$.getJSON('/photos', (data, textStatus, jqXHR) => {
assert.equal(jqXHR.status, 200);
assert.deepEqual(data, { photos: Photo.findAll() });
done();
});
});
it('can overwrite an existing server route', function(done) {
this.timeout(5000);
const MemServer = require('../lib/index.js');
const Response = require('../lib/response.js').default;
MemServer.start();
window.$ = require('jquery');
const { Server } = MemServer;
const { Photo, User } = MemServer.Models;
Server.get('/photos', () => Response(500, { error: 'Internal Server Error'} ));
window.$.getJSON('/photos').fail((jqXHR) => {
assert.equal(jqXHR.status, 500);
assert.deepEqual(jqXHR.responseJSON, { error: 'Internal Server Error' });
done();
});
});
});