Ich versuche, einen Komponententest für eine Komponente in Angular 1,5 zu schreiben. Ich möchte diese Komponente und ihre Dom-Knoten testen. Diese Komponente enthält eine untergeordnete Komponente, die ziemlich komplex ist.Angular 1.5 Unit-Tests Komponente während Kind Komponenten ignorieren
Mein Ziel ist es, Unit-Test die äußere Komponente, ohne die untergeordnete Komponente zu kompilieren.
Da ich das DOM als auch testen will, ist es nicht ausreichend $ Component für diesen Test zu verwenden.
Hier ist ein kleines Beispiel von dem, was Ich mag erreichen würde:
Komponentencode:
angular.module('app').component('myComponent', {
bindings: {
username: '<',
},
template: `
<span>{{ $ctrl.username }}</span>
<my-complex-component />
`
controller: function() {}
});
Unit-Test für my-Komponente:
it('my-component should render username', function() {
var template = '<my-component username="username"></my-component>',
element,
scope,
date;
scope = $rootScope.$new();
scope.username = 'John';
element = $compile(template)(scope);
scope.$digest();
username = element.find('span');
expect(username.text()).to.be.equal('John');
});
my-Komplex-Komponente sollte nicht instanziiert werden. Es sollte in der Vorlage wie es ist widerstehen. Das Erstellen des Elements im Komponententest sollte zu
<span>John</span>
<my-complex-component />
führen Gibt es eine Möglichkeit, dies zu tun?
Wie ich weiß, funktioniert es genau so, wie Sie es erwartet haben. Wenn Sie Ihre Komponente kompilieren, werden keine inneren Komponenten kompiliert. Schauen Sie sich einfach 'console.log (element)' an. –
Leider befinden sich my-component und my-complex-component beide in der Modul-App. Da ich angle.mock.module ('app') aufrufen muss, um das Modul zu verspotten, lädt es beide Komponenten und versucht auch, meine-complex-Komponente zu kompilieren. –
können Sie versuchen, "My-Complex-Komponente" zu verspotten. Siehe [diese Antwort] (http://stackoverflow.com/questions/17533052/how-do-you-mock-directives-to-enable-unit-testing-of-higher-level-directive#answer-21923462) auf Mocking eine Direktive, aber benutze [$ compileProvider.component] (https://docs.angularjs.org/api/ng/provider/$compileProvider#component) statt – user2718281