Неожиданные результаты при тестировании объектов JavaScript - PullRequest
0 голосов
/ 09 июня 2011

Я нахожусь в процессе истинного изучения нюансов работы с объектами JavaScript и столкнулся с загадкой.

У меня есть набор «пространств имен» для сегментирования DOM и Model, на которые нужно действовать. Ниже приведен код:

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

this.model = {
      FirstName: "James"
    , LastName: "Eggers"
    , Email: "James.R.Eggers@gmail.com"
};

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];
        }
    }
};
};

Используя JsTestDriver, я провожу ряд тестов, чтобы поиграть и опробовать несколько вещей на странице и объектах модели. Конкретный тест ниже:

"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);
    }

В приведенном выше тесте первый assertEquals проходит; однако второй тест разрешает sandbox2.model.FirstName в «Джеймс» (начальное значение).

У кого-нибудь есть какие-либо рекомендации о том, как я могу изменить код (исходный или тестовый), чтобы позволить мне сопоставить значения объекта page с объектом model?

1 Ответ

2 голосов
/ 09 июня 2011

Кажется, проблема здесь:

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

Переменная property фактически является значением ключа объекта (FirstName, LastName и Email). Вы устанавливаете атрибуты value для этих строковых объектов без результата.

Я думаю, что вы хотели сделать что-то вроде:

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