2012-05-12 19 views
46

Estoy usando mocha para javascript unit-testing ahora.Global `before` y` beforeEach` for mocha?

Tengo varios archivos de prueba, cada archivo tiene un before y beforeEach, pero son exactamente lo mismo.

¿Cómo proporciono un before global y beforeEach para todos ellos (o algunos de ellos)?

Respuesta

26

Declara un before o beforeEach en un archivo aparte (yo uso spec_helper.coffee) y lo requiero.

spec_helper.coffee

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

test_something.coffee

require './spec_helper' 
+0

¿Puedes explicar un poco qué está pasando allí? – Gobliins

64

En la raíz de la carpeta de prueba, crear un ayudante prueba global test/helper.js que tiene su antes y beforeeach

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

// setup 
before(); 
beforeEach(); 

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

No debería tener que requerirlo explícitamente. De hecho, lanzará un error porque antes, antes, cada uno, etc. no existirá en el contexto requerido. Siempre que esté incluido en el directorio de prueba, el código se debe ejecutar antes de cualquiera de las pruebas. – khoomeister

+1

gracias @khoomeister que era para una versión anterior! actualizado – AJcodez

+1

Lo uso, muy bien, pero me pregunto dónde encontrar documentos en él? – Zlatko

-1

El uso de un módulo puede hacer que sea más fácil tener una configuración/desmontaje global para su suite de pruebas Aquí hay un ejemplo usando RequireJS (módulos AMD):

En primer lugar, vamos a definir un entorno de prueba con nuestro mundial instalación/desmontaje:

// 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 
    }); 
}); 

En nuestro corredor JS (incluido en el corredor HTML de moca, a lo largo de la otra bibliotecas y archivos de prueba, como <script type="text/javascript">…</script>, o mejor, como un archivo externo de JS):

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 podrían implementarse como esto:

// 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 
    }); 
    }); 
});