Lo scenario angolare funziona bene quando l'app angolare è pronta su DOM ready. Non è il caso quando si usa requirejs o un'altra lib di AMD. Come aggiungere supporto per AMD in uno scenario angolare?Come utilizzare lo scenario angolare con requirejs
risposta
Quello che devi fare è sovrascrivere il comportamento di caricamento del frame predefinito ed emettere un nuovo evento quando l'app amd è pronta.
La prima cosa è aggiungere le seguenti righe nell'applicazione angolare insieme alla chiamata angular.bootstrap. Questi dati sono richiesti dallo scenario angolare.
angular.bootstrap(document, ['app']);
var html = document.getElementsByTagName('html')[0];
html.setAttribute('ng-app', 'app');
html.dataset.ngApp = 'app';
if (top !== window) {
top.postMessage({
type: 'loadamd'
}, '*');
}
Successivamente, nel tuo e2e runner, devi includere quelle linee. Se si tratta di uno script esterno, esso deve essere caricato dopo angolare scenario e deve essere analizzato prima che il DOM è pronto:
/**
* Hack to support amd with angular-scenario
*/
(function() {
var setUpAndRun = angular.scenario.setUpAndRun;
angular.scenario.setUpAndRun = function(config) {
if (config.useamd) {
amdSupport();
}
return setUpAndRun.apply(this, arguments);
};
function amdSupport() {
var getFrame_ = angular.scenario.Application.prototype.getFrame_;
/**
* This function should be added to angular-scenario to support amd. It overrides the load behavior to wait from
* the inner amd frame to be ready.
*/
angular.scenario.Application.prototype.getFrame_ = function() {
var frame = getFrame_.apply(this, arguments);
var load = frame.load;
frame.load = function(fn) {
if (typeof fn === 'function') {
angular.element(window).bind('message', function(e) {
if (e.data && e.source === frame.prop('contentWindow') && e.data.type === 'loadamd') {
fn.call(frame, e);
}
});
return this;
}
return load.apply(this, arguments);
}
return frame;
};
}
})();
Infine, per consentire la configurazione di amd, è necessario aggiungere l'attributo ng-useamd a angolare -scenario tag script.
<script type="text/javascript" src="lib/angular-1.0.3/angular-scenario.js" ng-autotest ng-useamd></script>
Ora sei pronto ad andare
testato con angolare scenario v1.0.3
La risposta di cui sopra non è riuscita in parte a mio scenario (angolare 1.1.4, fresco Karma). Nella vista di debug funzionava bene, nella normale pagina di panoramica non funzionava. Ho notato un altro annidato.
Ho cambiato il codice in messaggio per l'iframe padre dell'applicazione testata.
Sì, è un buon punto. Karma crea un altro frame che include il frame dello scenario angolare che include la cornice dell'app. Quindi, in questo caso, è in effetti il frame principale e non il frame superiore. – Francis
La risposta accettata è assolutamente corretta, ma è un peccato che devi inserire quel codice nella tua pagina.
Quindi, se aiuta, ho creato un preprocessore per karma per iniettare la 'correzione' come parte dell'esecuzione del test.
Codice: https://github.com/tapmantwo/karma-ng-bootstrap-fix-preprocessor NPM: https://www.npmjs.org/package/karma-ng-bootstrap-fix-preprocessor
Nota, questo funziona solo se si stanno servendo i file attraverso il karma. Se li stai trasmettendo, non passano attraverso il pre-processore. Quindi, in alternativa, ho un fork di ng-scenario che fa qualcosa di simile a consentire l'esecuzione manuale dei siti bootstrap;
https://github.com/tapmantwo/karma-ng-scenario
Questo non è un modulo nodo, quindi dovrete configurarlo manualmente, ma il suo meglio (secondo me) per avere qualcosa di simile al posto invece di infettare codice di produzione con qualcosa solo per ottenere test per passare.
- 1. Qual è lo scenario principale da utilizzare Socket.IO
- 2. RequireJs: Utilizzare caricamento automatico-dipendenze con spessore
- 3. Utilizzo di Dragula angolare senza RequireJS
- 4. Come utilizzare RequireJS optimizer in Play framework?
- 5. Come utilizzare i modelli precompilati in Handlebars con RequireJS?
- 6. Come utilizzare gli spazi dei nomi in Backbone con RequireJs
- 7. Scenario Scenario vs. Outline
- 8. Underscore.string con RequireJS
- 9. Come eseguire lo scenario jbeève più volte in modo sequenziale
- 10. Come utilizzare lo stesso controller con una finestra di dialogo Materiale angolare?
- 11. Utilizzare il filtro angolare fuori dall'applicazione angolare
- 12. Utilizzo di reactjs con requirejs
- 13. Utilizzare il plug-in jQuery con Backbone e Requirejs
- 14. Utilizzo di Meteor con Requirejs
- 15. Script multipli con requirejs
- 16. come utilizzare il passaporto con l'app nodo angolare?
- 17. Come utilizzare la griglia UI angolare con paging lato server
- 18. Come mantenere lo stato in angolare 2?
- 19. Configurazione dei moduli con RequireJS quando config dipende da RequireJS
- 20. Come eliminare uno scenario specflow
- 21. Miglior modello di progettazione per lo scenario seguente
- 22. AngularJS, requireJS e ngRoute
- 23. Applicazione Web con pacchetti backbone.js e requirejs, requirejs optimizer
- 24. grafici angolari che non funzionano con requirejs
- 25. Come utilizzare una variabile nella configurazione angolare
- 26. Come utilizzare più pagine indice in angolare
- 27. Come utilizzare il tema del materiale angolare?
- 28. Cucumber JS Richiama la funzione/lo scenario/passaggio nel mondo
- 29. Come caricare knockout.validation con knockout in requirejs
- 30. Come posso ottenere errori reali con requirejs?
Qualche possibilità che tu possa fornire un repo o un violino Github? –
Grazie mille Francis. Solo una nota che se si include JQuery nella pagina runner per qualsiasi motivo, è necessario scartare l'evento messaggio quando arriva, come: if (e.originalEvent) e = e.originalEvent; –