Calci fuori la moka viene descritto in parallelo

Voglio essere in grado di avere tutti i miei describe Mocha ottenere sbattuto fuori in parallelo. Qualcuno può aiutarmi a capire come fare?

  • Perchè vuoi fare questo? Condizioni di gara abbondassero dal before/beforeEach/after/afterEach potrebbe essere eseguiti in qualsiasi ordine e dal momento che tutti i test sono eseguiti nello stesso processo è necessario che le stesse richiedono cache per le gravidanze con feto singolo, stesse variabili di ambiente, etc. NodeJS è un singolo thread comunque, quindi dubito che sarebbe davvero vedere un guadagno dal fare questo se non si è in attesa per imposte differite le operazioni (come una chiamata HTTP) per completare.
  • Ho circa 50 describe test Api Rest e tutte le prove sono indipendenti tra di loro. Stavo cercando di vedere se era possibile avviare l’esecuzione di tutte le mie prove in una sola volta, o in batch. Voglio solo essere in grado di ridurre il tempo impiegato per eseguire il test.
  • Ci sono altri test corridori (come il Gelsomino), che potrebbero sostenere, ma non vorrei farlo a tutti. Prendo fiducia e un po ‘ più test eseguito ogni giorno nel mio test, possibilmente, di non essere realmente indipendente e causando falsi negativi, o peggio falsi positivi.
  • Ha un senso. Grazie per il consiglio.
InformationsquelleAutor Fizz | 2015-02-21

 

3 Replies
  1. 12

    Non è possibile farlo direttamente con la moka, perché crea un elenco di esso() richiama e richiama in ordine.
    moka-parallelo-test può fare questo se sei disposto a spostare il vostro descrive in separato .file js. Per convincervi, installare da qualche parte e richiamarlo con un breve-lenta in modo che i rapporti di ogni tempo:

    laptop:/tmp/delme$ npm install mocha-parallel-tests
    laptop:/tmp/delme$ cd node_modules/mocha-parallel-tests
    laptop:/tmp/delme/node_modules/mocha-parallel-tests$ ./bin/mocha-parallel-tests test/parallel/tests --timeout 10000 --slow 100

    Vedrete che durò tre (molto semplice), test suites, il tempo impiegato per eseguire più a lungo.

    Se il test non dipendono effetti collaterali di prove precedenti, si può fare tutto asincrono.
    Un modo semplice per farlo è quello di avviare la roba che prende un po ‘ prima di descrivere e utilizzare la normale moka apparato per la valutazione. Qui, mi crea un sacco di promesse che prendere un po ‘ per risolvere e quindi scorrere il test di nuovo, esaminare i loro risultati in un .quindi la funzione ():

    JS:

    var expect = require("chai").expect;
    
    var SlowTests = [
      { name: "a" , time: 250 },
      { name: "b" , time: 500 },
      { name: "c" , time: 750 },
      { name: "d" , time:1000 },
      { name: "e" , time:1250 },
      { name: "f" , time:1500 }
    ];
    
    SlowTests.forEach(function (test) {
      test.promise = takeAWhile(test.time);
    });
    
    describe("SlowTests", function () {
      //mocha defaults to 2s timeout. change to 5s with: this.timeout(5000);
      SlowTests.forEach(function (test) {
        it("should pass '" + test.name + "' in around "+ test.time +" mseconds.",
           function (done) {
             test.promise.then(function (res) {
               expect(res).to.be.equal(test.time);
               done();
             }).catch(function (err) {
               done(err);
             });
           });
      });
    });
    
    function takeAWhile (time) {
      return new Promise(function (resolve, reject) {
        setTimeout(function () {
          resolve(time);
        }, time);
      });
    }

    (Salvare come foo.js e richiamare con mocha foo.js.)

    Meta io non sono d’accordo con l’affermazione che il test dovrebbe essere principalmente essere sincrona. prima e dopo pragma sono più facili, ma è raro che un test invalida tutte le restanti prove. Tutti scoraggiare asincrona test non è scoraggiare i numerosi test di attività di rete.

    • Si dice “io non sono d’accordo con l’affermazione che il test dovrebbe essere principalmente essere sincroni.” Bene, che bello, ma nessuno ha detto questo. Quello che a me e ad altre persone che hanno detto è che il test dovrebbe essere sequenziale ma “sequenziale” non significa “sincrona”. E il codice di esempio si mostra non è un esempio di avere Moka esegui test in parallelo.
    • L’esecuzione di test in modo asincrono permette al motore di parallelizzare molti lenta attività come file o l’accesso alla rete. Non è un sostituto per i processi paralleli se il test sono essi stessi a elaborazione intensiva, ma nella maggior parte dei casi che ho visto, asincrona prove di ridurre notevolmente i tempi di testing — un bel sollievo se si prova prima di commettere.
    • Non hai indirizzo nulla ho detto nel mio commento precedente.
  2. 12

    Moka non supporta quello che stai cercando di fare, fuori dalla scatola. Esegue test in sequenza. Questo è un grande vantaggio quando si tratta di un’eccezione non gestita: la Moka può essere sicuri che è successo nei test che è attualmente in esecuzione. Così si attribuisce l’eccezione alla corrente di prova. È certamente possibile sostenere una prova parallela ma complicherebbe la Moka e un bel po’.

    E io tendo a concordare con David commento. Non vorrei farlo. Al livello in cui la Moka di solito opera, il parallelismo non mi sembrano particolarmente desiderabile. Dove ho usato il test di parallelismo prima è a livello di esecuzione end-to-end suites. Per esempio, eseguire una suite contro Firefox in Windows 8.1, mentre, al tempo stesso, in esecuzione della stessa suite contro Chrome Linux.

    • non hai un suggerimento per la gestione di un grande numero di prove con la moka? Per esempio, abbiamo 1900 test e ancora di arrampicata a causa di Ember-cli test di generazione per tutto messo in aggiunta a eslint, etc.
    • Il mio più grande Moka suite dispone di circa 350 test. Così che cosa si sta parlando, non è qualcosa che ho dovuto risolvere con la Moka. Ho eseguito in migliaia di singoli test quando ho eseguito il mio Selenio test, eseguito con comportarsi, che è basato su Python. Quando sono in esecuzione test manualmente, ho aggressivo ridurre il numero di prove da solo immediatamente pertinenti. Io uso Buildbot (anche Python-based) per il lancio automatico di generazioni che percorrono l’intera suite.
  3. 1

    Se si utilizza il karma per avviare il test, è possibile utilizzare karma-parallelo suddividere le prove tra più istanze di browser. Funziona specifiche in diversi browser istanze in parallelo, è molto semplice e facile da installare:

    npm i karma-parallel

    e quindi aggiungere il ‘parallelo’ per le strutture in elenco karma.conf.js

    module.exports = function(config) {
      config.set({
        frameworks: ['parallel', 'mocha']
      });
    };

    karma-parallelo

    Disclosure: io sono l’autore

Lascia un commento