Den hÀr stilen av test kallas för Behaviour Driven Development(BDD), alltsÄ beteende driven utveckling. Med detta menas att vi beskriver nÄgot som koden ska utföra och vad vi förvÀntar oss ska ske dÄ.
I detta första test sÄ ska vi testa en node servers index route, vi förvÀntar oss att den svarar med HTTP status 200, alltsÄ ok. Om servern gör detta sÄ vet vi att den Àr igÄng och fungerar.
test/indextest.js
// ladda in dependenciesconstexpect=require('chai').expect;constapp=require('../app');constrequest=require('supertest')(app);// testet börjar hÀrdescribe('index route', () => {describe('GET /', () => {// vad förvÀntar vi oss ska ske, it should return...it('should return OK status', () => {// utför requesten, kontrollera att den svarar 200 och avsluta sedan testetrequest.get('/').expect(200).end((err, res) => {if (err) throw err; }); }); });});
Testet kontrollerar aldrig vad sidan faktiskt svarar oss, utan enbart att status koden Àr 200. För att faktiskt se vad som returneras sÄ behöver vi anvÀnda andra metoder för att kontrollera svaret.
Vi utökar testet för att se att index sidan vÀlkomnar anvÀndaren.
Att kunna skicka data med tester Àr vÀldigt anvÀndbart, dÄ det tar bort ett stort manuellt moment med att hela tiden behöva mata in data i ett formulÀr till exempel.
test/logintest.js
describe('/login', () => {...describe('POST /', () => {it('should sign in user given a correct request body', (done) => {// routen vi postar till Àr /login// vi skickar data med form typen// form fÀlten Àr username och password// routen som sköter login redirectar anvÀndaren// till routen /home vid lyckad login, detta ger http status 302request.post('/login').type('form').send({ username:'USERNAME', password:'PASSWORD' }).expect(302).expect('Location','/home').end((err, res) => {if (err) throw err;returndone(); }); });});
routes/login.js
// logik för login, om lyckad result == trueif (result ==true) {// sÀtt en sessionreq.session.loggedin =true;req.session.username = username;// skicka vidare anvÀndaren till Auth skyddad sidares.redirect('/home');}