Уже опубликован ответ на сам тест, который можно найти здесь , но я не могу понять почему этот ответ правильный.
Часть теста , которая доставляет мне неприятности:
var keys = [];
var fruits = ['apple', 'orange'];
for(propertyName in fruits) {
keys.push(propertyName);
}
ok(keys.equalTo(['__', '__', '__']), 'what are the properties of the array?');
(очевидно) правильный ответ, как отмечено в приведенном выше связанном вопросе:
ok(keys.equalTo(['0', '1', 'fruits.prototype'), 'what are the properties of the array?');
Я попытался вставить ответ - исправил синтаксическую ошибку - и мой тест по-прежнему не проходит.
В том же файле теста другой тест почти идентичен, и ответ такой, какой я ожидал:
test("property enumeration", function() {
var keys = [];
var values = [];
var person = {name: 'Amory Blaine', age: 102, unemployed: true};
for(propertyName in person) {
keys.push(propertyName);
values.push(person[propertyName]);
}
ok(keys.equalTo(['name','age','unemployed']), 'what are the property names of the object?');
ok(values.equalTo(['Amory Blaine',102,true]), 'what are the property values of the object?');
});
Единственное различие, которое я вижу между этими двумя тестами, заключается в том, что второй использует объект, а не массив.
Я запускал код из первого теста сам (внеструктуры модульного тестирования) и выведите значение ключей, которое было показано как ["0","1"]
- что я и ожидал.Где находится это скрытое третье значение и как я могу получить к нему доступ?
Итак, я полагаю, что в конечном итоге у меня есть два вопроса:
- Почему ответ на другой вопрос не работает длямне?
- Чем отличается первый тест от второго?