📄
Webbserverprogrammering
  • Start
  • Utvecklarmiljö
    • Windows Subsystem for Linux
  • Teknisk orientering
    • Viktiga begrepp
  • Webbserver
    • Introduktion
    • Hur fungerar det?
    • Design - inte sĂ„ webbserver
    • Aktiv sida
    • Praxis
  • Databas
    • SQL
    • Ett exempel
    • SQL och Node
    • Databasdesign
    • CRUD Meeps
    • CRUD Filmdatabas
  • SĂ€kerhet
    • Introduktion
    • Inloggning
  • MVC
    • Model
    • Controller
    • View
  • Tester
    • Automatiserade tester
    • Testdriven utveckling
  • Containers
    • Docker
  • Laravel
    • Laravel, Nginx, Mysql
Powered by GitBook
On this page
  • Setup
  • Ett test med GET
  • POST test

Was this helpful?

  1. Tester

Automatiserade tester

Setup

Testning kommer att göras med npm. För det behöver vi installera nÄgra paket. De Àr alla dev dependencies.

npm install mocha chai supertest --save-dev

Efter installationen Àr vi redo att köra igÄng. Test kommer att ligga i en mapp som ska heta test i projektets root.

mkdir test

För att köra test sÄ anvÀnds npm och ett script kommando frÄn package.json. Notera att -r parametern enbart krÀvs om dotenv anvÀnds.

package.json
"scripts": {
    ...
    "test": "mocha -r dotenv/config --timeout 10000 --exit"

Ett test med GET

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 dependencies
const expect = require('chai').expect;
const app = require('../app');
const request = require('supertest')(app);

// testet börjar hÀr
describe('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 testet
      request.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.

views/index.pug
extends layout

block content
  h1 Welcome user
test/indextest.js
// testet börjar hÀr
describe('index route', () => {
  describe('GET /', () => {
    ...
  });
  it('should greet the user', (done) => {
    request.get('/')
      .end((err, res) => {
        if (err) throw err;
        expect(res.text).to.contain('Welcome')
        return done();
      });
  });
});

POST test

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 302
      request.post('/login')
        .type('form')
        .send({
          username: 'USERNAME',
          password: 'PASSWORD'
        })
        .expect(302)
        .expect('Location', '/home')
        .end((err, res) => {
          if (err) throw err;
          return done();
        });
    });
});
routes/login.js
// logik för login, om lyckad result == true
if (result == true) {
  // sÀtt en session
  req.session.loggedin = true;
  req.session.username = username;
  // skicka vidare anvÀndaren till Auth skyddad sida
  res.redirect('/home');
}

PreviousViewNextTestdriven utveckling

Last updated 4 years ago

Was this helpful?