node-fit-model
v0.1.7
Published
Checks whether an object is fits into a model.
Downloads
17
Maintainers
Readme
node-fit-model
Checks whether an object is fits into a model.
Motivation
When writing an E2E test regarding REST API, it is annoying to keep specifying that some parameters exist. This library makes that easy by writing the model requirements first then making objects fit into it.
Usage
/*
*
* File: test/SomeTest.js
* Using mocha and chai for BDD
*
*/
var expect = require('chai').expect, // Expect for BDD
fitModel = require('node-fit-model'),
Modelling = new fitModel({
modelDir: __dirname + '/test/models', // locate the models directory
postFix: 'Model.js' // attach pattern in the model directory files
});
describe('Some test', function(){
it('should have user data conform to User model', function(done)
{
request('/user/me', function(err, res, body)
{
/**
* response looks like this:
* {
* profile_id: '1234',
* name: 'Taku',
* gender: 'Male',
* locale: 'en_US',
* create_time: 1234211549,
* timezone_offset: 3600 * -8,
* latitude: -118.34,
* longitude: 37.311324,
* weight: 185,
* review: { average: 4.35, count: 58, last_updated: 1448216256},
* activities: [
* { activity_id: 2384762, create_time: 1448219070, activity_type: 'StatusUpdate'},
* { activity_id: 927614, create_time: 1448132672, activity_type: 'RanActivity'},
* { activity_id: 927614, create_time: 1448046272, activity_type: 'WalkActivity'}
* ]
* }
**/
var response = JSON.parse(body); // if stringified object
// Otherwise, it would throw an error.
expect(Modelling.fitModel('User', response)).to.equal(true);
done();
});
});
});
/*
*
* File: test/data/UserModel.js
* Represents a User Model
*
**/
var prototype = [
{ name: 'profile_id', type: 'integer', required: true, canBeNull: false },
{ name: 'name', type: 'string', required: true, canBeNull: false },
{ name: 'gender', type: 'enum', required: true, canBeNull: false, options: ['Male', 'Female'] },
{ name: 'locale', type: 'string', required: true, canBeNull: false, maxLength: 5 },
{ name: 'create_time', type: 'timestamp', required: true, canBeNull: false },
{ name: 'timezone_offset', type: 'integer', required: true, canBeNull: true },
{ name: 'latitude', type: 'float', required: true, canBeNull: false },
{ name: 'longitude', type: 'float', required: true, canBeNull: false },
{ name: 'weight', type: 'number', required: true, canBeNull: false },
{ name: 'review', type: 'object(Stats)', required: true, canBeNull: false },
{ name: 'activities', type: 'array(Activity)', required: true, canBeNull: false },
];
module.exports = prototype;
Installation
npm install node-fit-model
Testing
npm test
Coverage:
- Data type tests
- Required value and 'canBeNull' tests
Contribute
- Submit a Pull Request