Come scrivere test unitari per il mio progetto

0

Sono relativamente nuovo alla programmazione e non ho mai scritto test. Voglio scrivere test unitari per un progetto di gruppo (applicazione web angolare con ambiente di background del nodo scritto in dattiloscritto), che puoi trovare qui . Ho scelto un esempio che voglio testare e spero che con le tue risposte riesca a trasferire ciò che apprendo ad altre parti del progetto. Ecco la parte di codice in authentication.ts :

import {Request, Response} from 'express';

export function authenticatedUser(req: Request, res: Response, next: Function) {
    if (!req.user) {
        res.statusCode = 403;
        res.send('You are not logged in.');
    }
    next();
}

Vorrei scrivere un test unitario con Jasmine ed eseguirlo con Karma nel browser web. Il mio file authentication.spec.ts è proprio questo ora:

import jasmine;
import { authenticatedUser } from './authentication'

describe("authentication", () => {
    it("should authenticate user", () => {
        expect().toBE();
    });
});

Non so come procedere e se c'è un'istruzione if , devo testare per true e false ?

    
posta exhausend 27.11.2018 - 22:30
fonte

1 risposta

1

if there is an if statement, do I need to test for true and false?

Perché?

Un test è pensato per esercitare il tuo codice e mostrare come funziona.

  • Mostra i percorsi felici in cui tutto funziona.
  • Mostra i percorsi infelici in cui qualcosa va storto e in che modo viene comunicato.

Se voglio usare questa funzione / oggetto / API / sistema software, dovrei essere in grado di guardare questi test e capire cosa accadrà quando passerò X in. Restituirà null, restituirà un oggetto, genererà un'eccezione , bloccherà, è asincrono?

Ora il tuo codice ha un ramo: if true do X else do Y .

Diciamo che provi per il ramo X, ma non testare il ramo Y. È Y valido?

Ovviamente Y deve compilare bene, ma alcune lingue sono piuttosto liberali riguardo alla definizione di "bene compilato". JavaScript è in quella comunità liberty e fortunata. Questa non è una brutta cosa, semplicemente non rende "compilato bene" una dichiarazione soddisfacente sulla sua validità.

Se la lingua non ha problemi con esso, perché è anche importante che il ramo Y sia valido?

Capovolgalo, perché è importante che Branch X sia valido? La risposta sarà probabilmente qualcosa come "Branch X è un comportamento aziendale", "Branch X è necessario per la funzione Z" o "Branch X è quando tutto funziona". Il ramo Y rappresenta il contro-caso: quando il comportamento aziendale è diverso, o la funzione non ha bisogno di X, o qualcosa è andato storto. In breve, esiste uno scenario valido in cui verrà selezionato il ramo Y. Azione: Descrivi lo scenario nel test.

Questa è stata una semplificazione, c'è un altro caso: "Il ramo Y non viene mai usato". Azione: Elimina quel ramo.

Per il contesto, considera GoTo Fail . Questo bug potrebbe essere stato facilmente identificato da una serie di test che hanno esercitato ciascun ramo. Non farlo ha aperto quel software a comportamenti scorretti.

Apprendimento ulteriore

Cercherò YouTube per alcuni video e altrove per un libro:

  • Cerca uno dei video di Kent Beck su Unit Testing, trova anche uno dei suoi test di unità / libri di programmazione estremi.
  • Cerca una presentazione chiamata GUTS di Kevlin Henney, guarda anche le altre sue presentazioni sugli errori.

Per quanto riguarda la sintassi, consulta la documentazione di Jasmine .

    
risposta data 28.11.2018 - 06:44
fonte

Leggi altre domande sui tag