Я не понимаю операции 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() по умолчанию, и оно работает в консоли. Почему не работает в тесте?