ectypes

ectypes

A way to produce test objects quickly with any persistence layer.

ectype (plural ectypes) (philosophy) A copy; usually contrasted with the original, or archetype.

As opposed to prototype, ectype originally meant “wrought in relief” in Greek. Its roots are ec, a variant of “ex,” and týpos, a “figure on a wall.”

npm install ectypes

Ectypes by itself is a DSL for buiding data types and specifying how they should be filled with data.

Ectypes take descriptions of data types to build, usually in a test context.

ectypes.add({
    Project: {
        title: function(){ return Faker.Name.findName() }
    }
});

Ectypes need strategies to do things with the type.

ectypes.load(simpleStrategy);

Every function on the strategy (except for what is listed in an ignores array) is then mapped to the type, for example

project = ectypes.Project.build();
console.log(project.title); //gives 'Elaina Orn', a value produced by the Faker library.

Ectypes can also take _hooks to run on the produced object after a strategy's function has executed.

ectypes.add({
    Project: {
        title: function(){ return Faker.Name.findName() }
        , _hooks: ["after creation, add a task to the project", function(project, funcName){
            if (funcName === "create"){ 
            project.addTask(ectypes.Task.build()); 
        }
        }]
    }
    , Task {title: function(){ return Faker.Name.findName())
});

Ectypes uses a strategy pattern to specify proxied calls to whichever underlying persistence layer(s) you might like to use - they're very simple to write.

Current examples:

Current strategies - sequelize - http://www.sequelizejs.com/ . (Only build is supported, but that's enough to begin with).

If you write one, please let me know.

mocha tests/ectypes-test.js 

I originally had Ectypes working for Backbone.js, too. So it is possible to enable this testing for browser based development. If anyone wants this to discuss it, let me know.