2012-02-19 9 views
20

Zaczynam projekt nodejs i chciałbym zrobić BDD z Mocha i Zombiejs. Niestety jestem nowy w prawie każdym modnym powiedzeniu w tym zdaniu. Mogę sprawić, że Mocha i Zombiejs będą dobrze testować testy, ale nie mogę zintegrować tych dwóch - czy można użyć Mocha do testów Zombiejs, a jeśli tak, to jak by to wyglądało?Mocha and ZombieJS

Po prostu szukam "cześć świat", aby zacząć, ale samouczek/przykład będzie jeszcze lepszy.

Dzięki!

+0

Czy moja odpowiedź była tym, co miałeś na myśli? – Industrial

+0

Tak, właśnie tego chciałem. Dzięki! – Joel

Odpowiedz

36

Zakładając masz już zainstalowany mocha, zombie i expect.js zgodnie z instrukcją, to powinien pracować dla Ciebie:

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

}); 

Następnie powinieneś być w stanie uruchomić komendę mocha z folderu aplikacji root:

# mocha -R spec 

    Loads pages 
    ✓ Google.com (873ms) 


    ✔ 1 tests complete (876ms) 

Uwaga: Jeśli testy zachować w przypadku braku z powodu przekroczenia limitu czasu, to przyczynia się do zwiększenia mocha „St. imeout ustawienie bit za pomocą argumentu -t. Zapoznaj się z dokumentacją mokki, aby uzyskać szczegółowe informacje.

+0

należy pamiętać, że zombiej kończy się niepowodzeniem, jeśli jest używany z nodejs 0.10.xx z powodu tego problemu https://github.com/assaf/zombie/issues/487 Pozdrawiam –

+4

Pamiętaj, że problem wydaje się być rozwiązany! –

7

Napisałem obszerną odpowiedź na to pytanie, wyjaśniając ważne kwestie dotyczące testów asynchronicznych, dobrych praktyk ("przed()", "po()", TDD, ...) i zilustrowanych przykładem z prawdziwego świata.

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

+1

Czy kiedykolwiek przenosiłeś ten post? – Alex

+0

Ach, naprawdę chciałem to przeczytać! Nie sądziłeś, że przeniosłeś go do Posthaven, prawda? –

+0

Tee hee, wątek zombie. Przeniesiono artykuł: http://redotheweb.com/2013/01/15/functional-testing-for-nodejs-using-mocha-and-zombie-js.html –

-1

Jeśli używasz Microsoft Visual Studio, warto przyjrzeć się Rob Ashton Zombify. Wszystko jest dogodnie zintegrowane, dzięki czemu możesz zacząć pisać swoje przypadki testowe w JavaScript lub CoffeeScript. Przy okazji, nauka CoffeeScript zajmie ci godzinę, a to warte każdej minuty.

1

Jeśli chcesz używać ogórek-js do testów akceptacyjnych i mokka do testów "jednostkowych" dla strony, możesz użyć cuked-zombie (przykro mi z powodu reklamy).

zainstalować go jak opisano w readme na github, ale umieścić swój świat config w pliku o nazwie World-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 
}; 

Następnie użyj mokka z zombie w swoich testach jednostkowych tak:

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