Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  3 1662
Hei,

Jeg lurer på hvordan dere ville strukturert testmiljøet i en Node.js-app med MongoDB-database og Mongoose.

I toppen av index.js kjører jeg:

Kode

mongoose.connect(mongooseConnectionUrl);
Men når jeg kjører testene kunne jeg tenkt meg å brukt dummy-data, gjerne definert i en JSON-fil i test-mappa f.eks.

Hvordan ville dere strukturert dette?
Jeg ville hatt egne klasser (om du bruker ES6) som kommuniserer med databasen og lager objekter som representerer dataen. På den måten kan du lett mocke ut alt som har med database å gjøre i testene og lage små enkle unit-tester.
Det hadde nok vært det mest robuste ja. Jeg ser kanskje for meg å ha en config.production.json og en config.test.json, med forskjellige MongoDB-urler (og eventuelle andre ting som skal være forskjellig), også bruke NODE_ENV-variablen for å bytte mellom de.
Bruker du testrammerverk som f.eks. Jasmine kan du bruke spies (ikke så veldig ulikt mockito i Java). Dette lag deg lage "spies" på funksjonene som skal kommunisere med databasen og returnere de dataene du ønsker.

Kode

if("brukerService.hentBrukere skal ikke returnere slettede brukere", function(){
    spyOn(myDatabaseObject, 'getUsers').and.returnValue([{"username": "deletedUser", "deleted": true}, {"username": "registeredUser", "deleted": false}]);
    var brukere = brukerService.hentBrukere();
    expect(brukere.length()).toBe(1);
});
Da slipper du hele det problemet du snakker om, du bare aktivt mocker alt som har med databaen å gjøre i de testene du har behov for det. (om du ikke har sett på det før er Karma med Jasmine helt klart noe jeg vil anbefale å se på om du vil drive å unit-teste koden din)
Sist endret av etse; 4. februar 2016 kl. 22:39.