Я не понимаю операций Backbone.View.render () и .el. В render () я назначаю this.el свойства, поддерживающие выход, который я ожидаю увидеть, эти свойства находятся в this.el при тестировании, а .el возвращает ожидаемый результат в консоли. Но вывод не появляется в тестировании.
Вот код и тест (пожалуйста, чтобы не обращать внимания на грубость, я учусь и стараюсь держать тесты зелеными):
var RowLabelData = Backbone.Model.extend({});
var RowLabel = Backbone.View.extend({
initialize: function() {
this.for_attr = this.model.get("for_attr");
this.text_val = this.model.get("text_val");
this.el.setAttribute("for", this.for_attr);
},
render: function() {
$(this.el).html(this.text_val);
return this;
}
});
Я тестирую с помощью QUnit следующим образом:
test_row_data = new RowLabelData({
for_attr: "id_username",
text_val: "Username:"
});
test_row_v = new RowLabel({
model: test_row_data,
tagName: 'label'
});
test_row_v.render();
test_row = test_row_v.el;
equal(test_row.textContent, "Username:");
equal(test_row.getAttribute("for"), "id_username");
// FAILS:
equal(test_row, '<label for="id_username">Username:</label>');
QUnit говорит, что в последнем тесте << test_row >> возвращает <label></label>
. НО в консоли JavaScript << test_row >> возвращает ожидаемую строку в тексте.
Документы по магистрали говорят, что render () должен поместить желаемый HTML в el, но я пытаюсь использовать стандартное поведение render (), и оно работает в консоли. Почему это не работает в тесте?