Ich hasse es auch, Informationen zu duplizieren. Ich arbeite dieses Problem aus, indem ich in meiner Testsuite ein HTML-Setup verwende, das zweimal require.config
aufruft.
So HTML in meinem Test-Suite lädt zunächst RequireJS, und dann wird die allgemeine Konfiguration, die in einer Datei namens requirejs-config.js
ist:
<script type="text/javascript" src="lib/requirejs/require.js"></script>
<script type="text/javascript" src="requirejs-config.js"></script>
Die requirejs-config.js
Datei ist nichts Besonderes. Hier ist eine gekürzte Version:
require.config({
baseUrl: 'lib/',
paths: {
browser_test: '../../../browser_test',
jquery: 'external/jquery-1.10.2',
bootstrap: 'external/bootstrap/js/bootstrap.min',
// [...]
},
packages: [
{
name: "lodash",
location: "external/lodash"
}
],
shim: {
bootstrap: {
deps: ["jquery"],
exports: "jQuery.fn.popover",
},
// [...]
},
config: {
// [...]
},
enforceDefine: true
});
Dann gibt es ein <script>
Element, das require.config
mit den Einstellungen aufruft, die auf die Testumgebung gelten: (. Die 'mocha/mocha'
Shim sieht komisch aus, aber es ist richtig)
<script>
require.config({
paths: {
'mocha': '/node_modules/mocha',
'chai': '/node_modules/chai/chai'
},
shim: {
'mocha/mocha': {
exports: "mocha",
init: function() { this.mocha.setup('bdd'); return this.mocha; }
}
},
config: {
// [...]
}
});
</script>
In diesem speziellen Fall, der zweite Aufruf von require.config
fügt nur neue Werte zu paths
, shim
und config
aber es ist ein Auch möglich übersteuern frühere Werte. Ich könnte zum Beispiel den Pfad ändern, auf den 'jquery'
Bootstrap Shim auflöst oder ändert.
Sie können sehen, dass ich Mocha + Chai für meine Testsuite verwende, aber die obige Lösung ist wirklich nicht spezifisch für Mocha.
Großartige Idee. Ich habe einfach ignoriert, dass 'require.config' zweimal aufgerufen werden kann. Ich verwende Karma, also habe ich sowohl app/js/main.js als auch test/unit/test-main.js der Reihe nach hinzugefügt und selektiv 'requires.config' hinzugefügt oder überschrieben. –
Super Lösung @MerlinRan. Danke für den Tipp! – tonyhb
@MerlinRan können Sie ein Beispiel Ihrer Lösung veröffentlichen? – deitch