2016-07-09 3 views
0

Как getDOM() от @angular/platform-browser/src/dom/dom_adapter действительно работает в спецификациях?Как getDOM() работает в Angular 2 specs

Похоже in some specsgetDOM() относится к какой-то отдельно стоящий корневой элемент, похожий на AngularJS $rootElement:

var el1 = el('<div>a</div>'); 
    var el2 = el('<div>b</div>'); 
    getDOM().appendChild(el2, getDOM().firstChild(el1)); 
    expect(getDOM().childNodes(el2).length).toBe(2); 

И в комплекте Jasmine matchersgetDOM() волшебно относится к одному элементу:

function(actual: any /** TODO #???? */, className: any /** TODO #???? */) { 
     return { 
     pass: getDOM().hasClass(actual, className) == !isNot, 
     get message() { 
      return `Expected ${actual.outerHTML} ${isNot ? 'not ' : ''} 
        to contain the CSS class "${className}"`; 
     } 
     }; 
    }; 

я собирался для того чтобы построить некоторые утверждения Chai для удобства, но это заставляет меня думать, что я пропускаю что-то важное о том, как Angular 2 ведет себя в модульных тестах.

Что там происходит? Как устанавливается getDOM() контекст? Что это за контекст? Может ли быть только один контекст во времени? Должно ли getDOM() использоваться в производственном коде?

ответ

3

Нельзя импортировать из .../src/... зависимости, поскольку это считается частной реализацией этого пакета.

DomAdapter предназначено для Angular2-внутреннего использования только.

Он был экспортирован как открытый, но был удален из общедоступного API некоторое время назад, поэтому несколько ответов предлагают использовать его.

+0

Так что я должен игнорировать причины, по которым внутренние помощники ссылаются на него, и просто придерживаться обычного DOM, не так ли? – estus

+0

Точно. Если вы хотите полностью абстрагироваться от DOM (для чего обычно используется «DomAdapter»), вам нужно реализовать пользовательский «Renderer», но пока это не совсем документировано. –

+0

Хорошо, спасибо, я поближе посмотрю на Рендерера. – estus