tbob
v0.14.0
Published
Create example data for test cases. Inspired by rosiejs/rosie
Downloads
13
Readme
tbob
tbob is a test data builder inspired in particular by Rosie.
However, at some point tbob evolved into a different direction. We needed it to do more than "just" create test data. In our particular workflow, factory definitions serve as reference model of our data structures. From this model we want to create other stuff, like mappings for Elasticsearch. We want to be able to express type constraints, and a way to attach arbitrary metadata to any document type or attribute. Rosie's factory inheritance is fine, but we wanted something more flexible. All this comes at the cost of added complexity.
If generating test data is your primary concern, you are almost certainly better of with Rosie.
Disclaimer: This is work in progress. Before releasing v1.0.0 we need to
Document the DSL and the CLI
finalize and document the scenario formats
Give some examples of
@meta
-Annotations, and how those can be used to create ElasticSearch Mappings and other cool stuff.
Usage
First, you need to tell tbob what kind of documents it should create. You do this by defining factories, using tbob's own DSL:
module.exports = ->
@factory "TodoList", ->
@attr "owner"
.type ->
@attr "name"
.type @string
.fill "(owner name)"
@attr "email"
.type @optional @string
@attr "items"
.type @list @ref "TodoItem"
.fill [{},{},{done:true}]
@factory "TodoItem", ->
@attr "id"
.type @number
.fill [], ->@world.docCount "TodoItem"
@attr "title"
.type @string
.fill ["id"], (id)->"Title for item #{id}"
@attr "done"
.type @boolean
.fill false
Next, you can run tbob like this
tbob -w examples/ '["TodoList"]'
it will create a json document populated with defaults:
{
"items" : [
{
"done" : false,
"title" : "Title for item 0",
"id" : 0
},
{
"title" : "Title for item 1",
"id" : 1,
"done" : false
},
{
"done" : true,
"title" : "Title for item 2",
"id" : 2
}
],
"owner" : {
"email" : null,
"name" : "(owner name)"
}
}
Let's assume for your test case you need a todolist with some particular values in it. You only specify the values that are different from their respective defaults:
tbob -w examples/ '["TodoList", {"items":[{"title": "Find better examples"},{},{"done":true}]}]'
The result would be:
{
"owner" : {
"email" : null,
"name" : "(owner name)"
},
"items" : [
{
"title" : "Find better examples",
"id" : 0,
"done" : false
},
{
"done" : false,
"id" : 1,
"title" : "Title for item 1"
},
{
"title" : "Title for item 2",
"id" : 2,
"done" : true
}
]
}