0.1.7 • Published 8 years ago
node-fit-model v0.1.7
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