2012-07-06 2 views
10

Sto provando ad eseguire il ciclo di una suite di test per moka (voglio testare il mio sistema contro una miriade di valori con risultati attesi), ma non riesco a farlo funzionare. Per esempio:Test di loop Mocha?

spec/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 

Il problema è che la mia uscita di log della console si presenta così:

three 
three 
three 

dove voglio farlo sembrare come questo:

one 
two 
three 

Come posso eseguire il loop su questi valori per la mia mocha t EST?

risposta

12

Il problema qui è che si sta chiudendo la variabile "valore", e quindi sarà sempre valutare qualsiasi sia il suo ultimo valore.

Qualcosa di simile potrebbe funzionare:

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 

Questo funziona perché quando il valore è passato in questa funzione anonima, viene copiato il nuovo parametro di valore nella funzione esterna, e pertanto non è cambiato dal ciclo .

Modifica: Aggiunto "do" nic-nic.

+1

Yup, appena capito che io stesso alla https://github.com/visionmedia/mocha/issues/420. Grazie! – neezer

2

È possibile utilizzare 'data driven'. 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)); 
      }) 
     }) 
    }) 
})