2016-08-07 27 views
1

Ich habe ein karma.conf.js, die auf Browser-Stack für den Test-Browser und eine Menge von benutzerdefinierten Werfern hat definiert:Wie kann ich Tests gegen alle Browser in karma.conf.js ausführen, ohne alle Browser als Standard zu definieren oder alle in der Befehlszeile aufzulisten?

browsers: ["Chrome", "Firefox"], 
customLaunchers: { 
    IE11: { 
    base: "BrowserStack", 
    browser: "IE", 
    browser_version: "11", 
    os: "Windows", 
    os_version: "10", 
    }, 
    IE10: { 
    base: "BrowserStack", 
    browser: "IE", 
    browser_version: "10", 
    os: "Windows", 
    os_version: "8", 
    }, 
    // ... 
} 

Die meiste Zeit habe ich nur gegen Chrome und Firefox, aber hin und wieder möchte ich ausführen möchten Die Tests werden für alle Browser ausgeführt, die der Konfiguration bekannt sind.

Ich weiß, dass ich alle Schlüssel von customLaunchers in browsers setzen konnte, aber das ist keine gute Option, weil es bedeuten würde, dass die meiste Zeit würde ich --browsers passieren müssen den Lauf zu Chrome und Firefox zu begrenzen.

Ich weiß, ich könnte alle Browser in der Befehlszeile auflisten, aber das ist umständlich, weil die Liste 11 Elemente enthält und im Laufe der Zeit noch länger werden würde.

Also gibt es eine Möglichkeit, Karma zu sagen: "Lauf gegen alle bekannten Werfer von karma.conf.js"? Ich habe die Dokumentation überprüft, Probleme und SO gesucht und nichts gefunden.

Antwort

0

Es gibt keine integrierte Option, die ich kenne. Allerdings kann die karma.conf.js Datei geändert werden, um einen gefälschten Browser-Namen wie all zu akzeptieren, die als Signal verwendet werden kann, dass benutzerdefinierter Code in karma.conf.js sollte die Konfiguration festgelegt alle Browser in der Konfigurationsdatei bekannt zu verwenden:

module.exports = function configure(config) { 
    "use strict"; 
    var options = { 
    basePath: "", 
    // ... 
    browsers: ["Chrome", "Firefox"], 
    customLaunchers: { 
     IE11: // ... 
     IE10: // ..., 
     // ... 
    } 
    }; 

    // If the user passed `--browsers all`, then we grab the list 
    // from the `options` object and modify `config.browsers`. 
    var browsers = config.browsers; 
    if (browsers.length === 1 && browsers[0] === "all") { 
    var newList = options.browsers.concat(Object.keys(options.customLaunchers)); 

    browsers.splice.apply(browsers, [0, browsers.length].concat(newList)); 
    } 

    config.set(options); 
} 

Der options Objekt enthält die Konfiguration für Ihr Projekt. Wenn der Benutzer --browsers all in der Befehlszeile übergibt, wird der Wert config.browsersan Stelle geändert, um alle Browser aufzulisten. Beachten Sie, dass es an Ort und Stelle geändert werden muss. Das Ersetzen des Werts durch ein neues Array wird nicht funktionieren, wahrscheinlich weil Karma eine Referenz speichert, bevor karma.conf.js ausgeführt wird, und diese Referenz ab diesem Zeitpunkt verwendet. Außerdem hat das Ändern des Werts options.browsers keine Auswirkung, da config.browsers Priorität hat. (Andernfalls überschreibt --browsers [...] nicht, was in der Konfiguration ist, die durch karma.conf.js übergeben wurde.)