2012-07-06 22 views
10

Estoy tratando de repetir un conjunto de pruebas de mocha (quiero probar mi sistema con una miríada de valores con los resultados esperados), pero no puedo hacer que funcione. Por ejemplo:¿Pruebas de Loop Mocha?

especificación

/example_spec.coffee:

test_values = ["one", "two", "three"] 

for value in test_values 
    describe "TestSuite", -> 
    it "does some test", -> 
     console.log value 
     true.should.be.ok 

El problema es que mi salida del registro de la consola se ve así:

three 
three 
three 

donde yo quiero que se vea como esto:

one 
two 
three 

¿Cómo puedo recorrer estos valores para mi mocha t? ests?

Respuesta

12

La cuestión aquí es que se está cerrando sobre el "valor" variable y por lo que siempre va a evaluar a cualquiera que sea su último valor es.

Algo como esto funcionaría:

test_values = ["one", "two", "three"] 
for value in test_values 
    do (value) -> 
    describe "TestSuite", -> 
     it "does some test", -> 
     console.log value 
     true.should.be.ok 

Esto funciona porque cuando el valor se pasa a esta función anónima, que se copia en el nuevo parámetro de valor en la función externa, y por lo tanto no se modifica por el bucle .

Editar: Se agregó coffeescript "do" niceness.

+1

Yup, me di cuenta de eso a la https://github.com/visionmedia/mocha/issues/420. ¡Gracias! – neezer

2

Puede usar 'manejado por datos'. https://github.com/fluentsoftware/data-driven

var data_driven = require('data-driven'); 
describe('Array', function() { 
    describe('#indexOf()', function(){ 
     data_driven([{value: 0},{value: 5},{value: -2}], function() { 
      it('should return -1 when the value is not present when searching for {value}', function(ctx){ 
       assert.equal(-1, [1,2,3].indexOf(ctx.value)); 
      }) 
     }) 
    }) 
}) 
Cuestiones relacionadas