JamesEggers
JamesEggers

Reputation: 12935

Unexpected Results in Testing JavaScript Objects

I'm in the process of truly learning the nuances of working with JavaScript objects and ran into a snag.

I have a set of "namespaced" objects to segment the DOM and Model to act on. Below is code:

function Sandbox2(){
this.page = {
      FirstName: document.getElementById("FirstName")
    , LastName: document.getElementById("LastName")
    , Email: document.getElementById("Email")
};

this.model = {
      FirstName: "James"
    , LastName: "Eggers"
    , Email: "[email protected]"
};

this.behavior = {};

this.bindPageToModel = function(){
    for(var property in this.page){
        if (property){
            property.value = this.model[property];
        }
    }
};

    this.bindModelToPage = function(){
    for(var property in this.model){
        if (property){
            this.model[property].value = this.page[property];
        }
    }
};
};

Using JsTestDriver, I'm doing a number of tests to play around and try out a few things of the page and model objects. The specific test is below:

"test ModelBinding should be allowed." : function(){
        var sandbox2 = new Sandbox2();
        var page = sandbox2.page;
        page.FirstName = "Test";
        page.LastName = "Account";
        sandbox2.bindModelToProperty();

        assertEquals("Ensure the new values took.", page.FirstName, sandbox2.page.FirstName);
        assertEquals("New Page values should be in the model.", "Test", sandbox2.model.FirstName);
    }

In the above test, the first assertEquals passes; however, the second test resolves sandbox2.model.FirstName to "James" (the initial value).

Anyone have any recommendations on how I can change the code (original or test) to allow me to map the page object's values to the model object?

Upvotes: 0

Views: 131

Answers (1)

Luca Matteis
Luca Matteis

Reputation: 29267

It seems like the issue is here:

for(var property in this.page){
    if (property){
        property.value = this.model[property];
    }
}

The property variable is actually the key value of the object (FirstName, LastName and Email). You're setting the value attributes on these string objects without any result.

I think you meant to do something like:

this.page[property].value = this.model[property];

Upvotes: 2

Related Questions