Ich versuche, einen (Kind-) Controller einer AngularJS 1.5-Komponente (mit Webpack) zu testen, die eine Elternkomponente und einen Controller von einem anderen Modul benötigt.Angular 1.5-Unit-Testcontroller, der den Controller der übergeordneten Komponente benötigt
Kinderreglerstruktur:
function ChildController() {
var vm = this;
vm.searchText = '';
vm.submit = function() {
var data = {};
data['srch'] = vm.searchText;
vm.parentCtrl.submitTextSearch(data);
};
}
module.exports = ChildController;
Kinder Komponente:
var template = require('./child.html');
var controller = require('./child.controller');
var childComponent = {
require: {
parentCtrl: '^parent'
},
template: template,
controller: controller,
controllerAs: 'vm'
};
module.exports = childComponent;
was So würde ich tun ist, mag die parentCtrl zu verspotten, die in der childController der submit() erforderlich ist - Funktion. Ich konnte nicht herausfinden, wie ich das eigentlich machen sollte. Ich habe einige ähnliche Kinder-Eltern-Richtlinien-Lösungen gefunden und diese, z. Injizieren des Eltern-Controllers durch ein gefälschtes HTML-Element, wie in this child-parent directive example beschrieben, und im Grunde dasselbe stackoverflow solutions ohne Ergebnisse. Meine Probleme unterscheiden sich zumindest dadurch, dass sich der Kind- und Eltern-Controller in verschiedenen Modulen befinden. Und ich denke, Scope-Tricks sind nicht so viel Angular 1.5-Stil?
Das Skelett meines Jasmin Test ohne meine gescheitert mock Versuche:
describe('child component', function() {
describe('child controller', function() {
var controller;
beforeEach(angular.mock.module('child'));
beforeEach(inject(function(_$componentController_) {
controller = _$componentController_('child');
}))
it('should work', function() {
controller.searchText = "test";
controller.submit();
})
})
})
Die in TypeError: Cannot read property 'submitTextSearch' of undefined
führt. Was genau sollte ich tun, um den übergeordneten Controller zu verspotten? Mit meiner begrenzten Erfahrung in Angular habe ich keine Ideen mehr.
Ich habe das versucht, aber funktioniert nicht für mich. Immer noch "Controller '', benötigt von Direktive '', kann nicht gefunden werden!". –
Sind Sie sich Ihrer Karma-Konfiguration sicher? Vielleicht werden einige Dateien nicht geladen. – asoriano