jsFactory for Building Quick JavaScript Objects With States
December 6th, 2008 by ScottK | No Comments | Filed in JavaScriptI know of , and use, two systems that allows me to test my JavaScript: jsUnit for Test Driven Development and JsSpec for Behavior Driven Development. I find that in order to setup the object in question I lacked the ability to quickly create objects in the states or values that I needed. So more lines where devoted to building the objects than actually needed to test them. This got rather menial.
I though to myself one day, why can’t JavaScript have a quick way to create objects or even DOM elements quickly and in the state that I need them in; other languages have this ability for testing.
So I created jsFactory and it allows me to call the jsFactory class with the name of the object I needed, filled in with my pre-defined field values as well as any special values. I has allowed me more time to test than build objects over an over again for testing.
It has become such an important library for me I want to give this out to everyone that are interested. You can download the library and example files here. jsFactory
Testing without jsFactory would look like this:
function build_person() {
person = new Person();
person._firstName = "Scott";
person._lastName = "Krutsinger";
return person;
}
function testPerson() {
person1 = build_person();
//Get a second object to test against
person2 = build_person();
person2._firstName = "Marvin";
person2._lastName = "Martian";
//Test code
}
The function build_person does return a Person object in the state that we need, but when we need another person object then we still have to modify the field values. Which isn’t necessary with jsFactory:
function build_person() {
return {
_firstName : "Scott",
_lastName : "Krutsinger"
};
}
function testPerson() {
person1 = jsFactory.create("Person");
//Get a second object to test against
person2 = jsFactory.create("Person", {"_firstName" : "Marvin", "_lastName" : "Martian"});
//Test code
}
jsFactory is there to help us build objects in the testing state we need, whether this is predefined or specialized as we need. When the create method is called on jsFactory it goes through two processes: default field attribute assignment then the assignment of any fields that where present as arguments. jsFactory doesn’t actually care that it is being used in testing so using it for quick object builds in production code is also a way to use it as well.
jsFactory has another function included to build DOM elements quickly.
my_anchor = jsFactory.createHtmlElement("a", {"href" : "http://www.techraving.com", "target" : "_blank"});
my_anchor is a DOM element that I can use for testing or used in my application. You can even specify that the created element attach itself to another element by id or the object alone:
div1_element = jsFactory.createHtmlElement("div", {"id" : "div1"});
//attach by id
my_anchor1 = jsFactory.createHtmlElement("a", {"href" : "http://www.techraving.com", "target" : "_blank"}, "div1");
//attach by element
my_anchor2 = jsFactory.createHtmlElement("a", {"href" : "http://www.techraving.com", "target" : "_blank"}, div1_element);
//div1 now has both my_anchor 1 & 2 as child elements!
Use this link to download JsFactory . It contains the jsFactory class as well as example for us. jsFactory has let me concentrate more on testing objects than building them and I hope it does the same for you.





