Sto provando a testare un controller (figlio) di un componente AngularJS 1.5 (con Webpack) che richiede un componente padre e un controller da un altro modulo.Controller di test angolare a 1,5 unità che richiede il controller del componente genitore
Bambino struttura di regolazione:
function ChildController() {
var vm = this;
vm.searchText = '';
vm.submit = function() {
var data = {};
data['srch'] = vm.searchText;
vm.parentCtrl.submitTextSearch(data);
};
}
module.exports = ChildController;
componente figlio:
var template = require('./child.html');
var controller = require('./child.controller');
var childComponent = {
require: {
parentCtrl: '^parent'
},
template: template,
controller: controller,
controllerAs: 'vm'
};
module.exports = childComponent;
Quindi quello che vorrei fare è prendere in giro la parentCtrl che è richiesto a presentare() del childController - la funzione. Non sono stato in grado di trovare come farlo realmente. Ho trovato alcune soluzioni simili per la direttiva figlio-genitore e ho provato quelle, ad es. iniettare il controller genitore tramite un falso elemento HTML come descritto in this child-parent directive example e fondamentalmente lo stesso stackoverflow solutions senza risultati. I miei problemi differiscono almeno nel fatto che il controller figlio e genitore si trovano in moduli diversi. E suppongo che i trucchi di ambito non siano molto angolari in stile 1.5?
Lo scheletro del mio test Jasmine senza i miei tentativi falliti finte:
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();
})
})
})
che si traduce in TypeError: Cannot read property 'submitTextSearch' of undefined
. Cosa dovrei fare esattamente per deridere il controllore genitore? Con la mia limitata esperienza in Angular, sono fuori di idee.
Ho provato questo, ma non funziona per me. Ancora non è stato trovato "Controller '', richiesto dalla direttiva ''!". –
Sei sicuro della tua configurazione di karma? Forse alcuni file non vengono caricati. – asoriano