2012-02-20 35 views
9

Estoy incluyendo Mocha.js con el excelente use shim para un sitio Require.js-based.Acceda a las funciones "globales" de mocha.js al usar require.js

¿Cómo accedo a las funciones de definición() y() de BDD declaradas por Mocha cuando se utiliza Require.js?

Aquí es un ejemplo de código básica:

Test.js:

var mocha = require('use!mocha') 
    , testFile = require('testFile.js') 

mocha.setup('bdd'); 
mocha.run(); 

testFile.js:

define(function(require) { 
    // describe() and it() are not available 
    describe('Book', function() { 
    it('should have pages', function() { 

    }); 
    }); 
}); 

consigo el error Uncaught ReferenceError: describe is not defined cuando se ejecuta en el navegador.

He intentado window.describe e intenté mover el require ('testFile.js') a después del mocha.setup ('bdd'). Sé que me estoy perdiendo algo. Probablemente pasando el contexto a mocha de alguna manera.

Respuesta

6

Encontré la solución en el proyecto amd-testing examples de geddski.

En lugar de incluir el archivo (s) de prueba en la parte superior junto con moka, así:

define(['use!mocha', 'testFile'], 
function(Mocha, TestFile) { 
    mocha.setup('bdd'); 
    mocha.run(); 
}); 

El archivo de prueba (s) deben ser incluidos como otra llamada y requieren mocha.run() incrustado en la devolución de llamada:

define(['use!mocha'], 
function(Mocha) { 
    mocha.setup('bdd'); 

    // Include the test files here and call mocha.run() after. 
    require(['testFile'], 
    function(TestFile) { 
    mocha.run(); 
    }); 
}); 
+0

Además, querrá pasar el parámetro hecho en él() y llamar a done() en sus casos de prueba. De lo contrario, su prueba puede arrojar un error, pero mocha alegará que pasó. – baalexander

+0

¡Yuck! ¿Sigue siendo esta la mejor solución? –

+0

Ethan - Espero que haya una mejor solución. ¡Publique otra respuesta si encuentra una! – baalexander

13

el problema es que las funciones globales como describe y it son establecidos por mocha.setup(). Puede usar la propiedad shim config init para llamar al mocha.setup() antes de exportar mocha.

requirejs.config({ 
    shim: { 
    'mocha': { 
     init: function() { 
     this.mocha.setup('bdd'); 
     return this.mocha; 
     } 
    } 
    } 
}); 

require(['mocha', 'test/some_test'], function (mocha) { 
    mocha.run(); 
}); 

Los archivos de prueba necesitan requerir mocha.

define(['mocha'], function (mocha) {  
    describe('Something', function() { 
    // ... 
    }); 
}); 

propiedad Shim config init se introdujo en RequireJS 2.1. Es posible que pueda utilizar la propiedad exports en lugar de init con RequireJS 2.0.

+1

Usuarios de Alas for Node: 'Error: la configuración de Shim no se admite en el nodo' – mikemaccana

+0

esto funcionó para mí (requirejs + configfile + testem + mocha) – oak

+0

Funcionó para mí también. Muchas gracias. –

Cuestiones relacionadas