2012-05-12 14 views
46

Sto usando la moka per i test delle unità javascript ora.Globale `prima` e` beforeEach` per moka?

Ho diversi file di test, ogni file ha uno before e beforeEach, ma sono esattamente gli stessi.

Come è possibile fornire uno before globale e beforeEach per tutti (o alcuni di essi)?

risposta

26

Dichiarare uno before o beforeEach in un file separato (io uso spec_helper.coffee) e richiederlo.

spec_helper.coffee

afterEach (done) -> 
    async.parallel [ 
    (cb) -> Listing.remove {}, cb 
    (cb) -> Server.remove {}, cb 
    ], -> 
    done() 

test_something.coffee

require './spec_helper' 
+0

puoi spiegare un po 'cosa sta succedendo lì? – Gobliins

64

Nella radice della cartella di prova, creare un test di supporto globale test/helper.js che ha la vostra prima e beforeeach

// globals 
global.assert = require('assert'); 

// setup 
before(); 
beforeEach(); 

// teardown 
after(); 
afterEach(); 
+8

Non dovresti aver bisogno di richiederlo esplicitamente. In effetti, genererà un errore perché prima, prima di Each, ecc. Non esisterebbe nel contesto richiesto. Finché è incluso nella directory di test, il codice deve essere eseguito prima di qualsiasi test. – khoomeister

+1

grazie a @khoomeister che era per una vecchia versione! aggiornato – AJcodez

+1

Lo uso, molto bello, ma mi chiedo dove trovare i documenti su di esso? – Zlatko

-1

L'uso di un modulo può rendere più facile avere un setup/smontaggio globale per la tua suite di test. Ecco un esempio utilizzando RequireJS (moduli AMD):

In primo luogo, definiamo un ambiente di test con il nostro globale setup/teardown:

// test-env.js 

define('test-env', [], function() { 
    // One can store globals, which will be available within the 
    // whole test suite. 
    var my_global = true; 

    before(function() { 
    // global setup 
    }); 
    return after(function() { 
    // global teardown 
    }); 
}); 

Nel nostro corridore JS (inclusa nel corridore HTML di moka, lungo l'altra librerie e file di test, come <script type="text/javascript">…</script>, o meglio, come un file JS esterno):

require([ 
      // this is the important thing: require the test-env dependency first 
      'test-env', 

      // then, require the specs 
      'some-test-file' 
     ], function() { 

    mocha.run(); 
}); 

some-test-file.js potrebbero essere attuate in questo modo:

// some-test-file.js 

define(['unit-under-test'], function(UnitUnderTest) { 
    return describe('Some unit under test', function() { 
    before(function() { 
     // locally "global" setup 
    }); 

    beforeEach(function() { 
    }); 

    afterEach(function() { 
    }); 

    after(function() { 
     // locally "global" teardown 
    }); 

    it('exists', function() { 
     // let's specify the unit under test 
    }); 
    }); 
}); 
Problemi correlati