Я до сих пор не знаю, почему создание пользовательского HtmlElement
не работает в этом случае, но есть достаточно хороший способ обойти общую проблему: DomParser
.
Вы можете использовать метод parseFromString
для синтаксического анализа строки HTML на Document
и использовать его как упрощенный способ тестирования вашего кода. Поведение DomParser
имитирует его JS аналог: DOMParser
.
Пример:
import 'dart:html' show Document, DomParser, Element;
import 'package:test/test.dart' show expect, test;
void main() {
const String htmlAsString = '<p>A paragraph</p>';
final Document document = DomParser().parseFromString(htmlAsString, 'text/html');
test('Checking the text inside the paragraph', () {
final Element paragraph = document.querySelector('p');
expect(paragraph.text, 'A paragraph');
});
}
Обратите внимание, что использование dart:io
для открыть HTML fixtures / fakes / mocks будет невозможно, потому что большинство его функций не поддерживается браузером.
Пользовательские теги также могут использоваться в строковом HTML выше, они выиграли У них нет собственных классов, все они будут иметь тип среды выполнения HtmlElement
, который является подклассом Element
. Парсер сможет обрабатывать их, изменяя / инициализируя их tagName
в фоновом режиме - на самом деле, похоже, он делает это для всех тегов.