Der folgende Komponententest funktioniert in Chrome (aufgrund seiner nativen Unterstützung für HTML-Imports), aber ich habe Mühe, es mit PhantomJS (und anderen Browsern für die Angelegenheit) zu arbeiten).Angle-Komponente in PhantomJS mit Jasmine/Karma importieren
Ich versuche, den Import ('webcomponents.js/HTMLImports.min.js') zu füllen, aber es hat keine Auswirkungen.
karma.conf.js
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
plugins: [
'karma-phantomjs-launcher',
'karma-chrome-launcher',
'karma-jasmine'
],
files: [
'node_modules/angular/angular.js',
'node_modules/angular-mocks/angular-mocks.js',
'node_modules/webcomponents.js/HTMLImports.min.js',
'component/so-example.html',
'test/test.spec.js'
],
port: 9876,
browsers: ['Chrome', 'PhantomJS']
});
};
Komponente/so-example.html
<script>
(function() {
var soExampleComponent = {
transclude: true,
bindings: {
number: '@'
},
template: '<span class="compiled">{{$ctrl.number}}</span>'
};
angular.module('so.components.example', []).component('soExample', soExampleComponent);
})();
</script>
test/test.spec.js
describe('<so-example>', function() {
var $scope, el;
beforeEach(module('so.components.example'));
beforeEach(inject(function ($compile, $rootScope) {
$scope = $rootScope.$new();
el = $compile('<so-example number="{{ 3 }}"></so-example>')($scope)[0];
$scope.$digest();
}));
it('should import and compile', function() {
expect(el.querySelector('.compiled').textContent).toBe('3');
});
});
den Fehler von PhantomJS
[email protected]:/Temp/so-example/node_modules/angular/angular.js:322:24
[email protected]:/Temp/so-example/node_modules/angular/angular.js:4591:12
[email protected]:/Temp/so-example/node_modules/angular/angular.js:4513:30
[email protected]:/Temp/so-example/node_modules/angular-mocks/angular-mocks.js:3060:60
C:/Temp/so-example/node_modules/angular/angular.js:4631:53
TypeError: undefined is not an object (evaluating 'el.querySelector') in C:/Temp/so-example/test/test.spec.js (line 14)
C:/Temp/so-example/test/test.spec.js:14:14
Warum ist Ihre Komponente in einer HTML-Datei? – Phil
Es ermöglicht mir, meine Stile und Skripts zu einer übersichtlichen Komponente (a la web-components) zusammenzufügen, ohne einen unnötigen Build-Schritt (Verkettung) einzuführen, ich habe keine Stile eingeschlossen, da ich es nicht relevant fand zum Beispiel. Obwohl, wie Sie vielleicht erwarten, wenn ich es in seine eigene .js Datei ziehe, funktioniert es wie normal. –