2012-02-19 10 views
20

Sto avviando un progetto nodejs e vorrei fare BDD con Mocha e Zombiejs. Sfortunatamente sono nuovo di quasi tutte le parole d'ordine in quella frase. Posso ottenere Mocha e Zombiejs che eseguono i test bene, ma non riesco a integrare i due: è possibile utilizzare Mocha per eseguire i test di Zombiejs e, in caso affermativo, come sarebbe?Mocha e ZombieJS

Solo cercando "ciao mondo" per iniziare, ma un tutorial/esempio sarebbe ancora meglio.

Grazie!

+0

La mia risposta era ciò che avevate in mente? – Industrial

+0

Sì, è quello che volevo. Grazie! – Joel

risposta

36

Supponendo di aver già installato mocha, zombie e expect.js secondo le istruzioni, questo dovrebbe funzionare per voi:

// Put below in a file in your *test* folder, ie: test/sampletest.js: 

var expect = require('expect.js'), 
Browser = require('zombie'), 
browser = new Browser(); 

describe('Loads pages', function(){ 

    it('Google.com', function(done){ 

     browser.visit("http://www.google.com", function() { 
      expect(browser.text("title")).to.equal('Google'); 
      done(); 
     }); 
    }); 

}); 

allora si dovrebbe essere in grado di eseguire il comando mocha dalla cartella dell'applicazione principale:

# mocha -R spec 

    Loads pages 
    ✓ Google.com (873ms) 


    ✔ 1 tests complete (876ms) 

Nota: Se i test continuano a non riuscire a causa di timeout, è possibile aumentare mocha 'st imeout imposta un po 'usando l'argomento -t. Controlla la documentazione di mocha per i dettagli completi.

+0

essere consapevoli che zombiejs non riesce se utilizzato con 0.10.xx nodejs causa di questo problema https://github.com/assaf/zombie/issues/487 applausi –

+4

Essere consapevoli del fatto che problema sembra essere risolto! –

7

ho scritto una risposta lunga a questa domanda spiegando importanti trucchi su prove asincrone, le buone pratiche ('prima()', 'dopo()', TDD, ...), e illustrato da un esempio reale mondo.

http://redotheweb.com/2013/01/15/functional-testing-for-nodejs-using-mocha-and-zombie-js.html

+1

Hai mai spostato questo post? – Alex

+0

Ah, volevo davvero leggere anche questo! Non dovresti averlo spostato a Posthaven, vero? –

+0

Tee hee, filo zombi. Articolo spostato: http://redotheweb.com/2013/01/15/functional-testing-for-nodejs-using-mocha-and-zombie-js.html –

-1

Se si utilizza Microsoft Visual Studio, si potrebbe desiderare di dare un'occhiata a Rob Ashton di Zombify. Tutto è integrato in modo accettabile in modo da poter iniziare a scrivere i casi di test in JavaScript o CoffeeScript. A proposito, imparare CoffeeScript ti richiederà un'ora, e vale ogni minuto.

1

se si desidera utilizzare cetriolo-j per i test di accettazione e moka per i test di "unità" per una pagina, è possibile utilizzare cuked-zombie (mi dispiace per la pubblicità).

installarlo come descritto nel readme su github, ma posto tuo config mondo in un file chiamato mondo-config.js

`/* globals __dirname */ 
var os = require('os'); 
var path = require('path'); 

module.exports = { 
    cli: null, 
    domain: 'addorange-macbook': 'my-testing-domain.com', 
    debug: false 
}; 

Quindi utilizzare moka con zombie nei vostri test di unità in questo modo:

var chai = require('chai'), expect = chai.expect; 
var cukedZombie = require('cuked-zombie'); 

describe('Apopintments', function() { 

    describe('ArrangeFormModel', function() { 
    before(function(done) { // execute once 
     var that = this; 

     cukedZombie.infectWorld(this, require('../world-config')); 

     this.world = new this.World(done); 

     // this inherits the whole world api to your test 
     _.merge(this, this.world); 
    }); 

    describe("display", function() { 

     before(function(done) { // executed once before all tests are run in the discribe display block 
     var test = this; 
     this.browser.authenticate().basic('maxmustermann', 'Ux394Ki'); 

     this.visitPage('/someurl', function() { 
      test.helper = function() { 

      }; 

      done(); 
     }); 
     }); 

     it("something on the /someurl page is returned", function() { 
     expect(this.browser.html()).not.to.be.empty; 
     });