Jasmine mira ad essere facile da leggere. Un semplice test hello world assomiglia al codice qui sotto, dove describe() descrive una suite di test e it() è una specifica di test individuale. Il nome “it()” segue l’idea dello sviluppo guidato dal comportamento e serve come prima parola nel nome del test, che dovrebbe essere una frase completa. L’uso segue una sintassi simile a quella di RSpec.
Il codice sottostante testa questa funzione
function helloWorld() { return 'Hello world!';}
e verifica che il suo output sia effettivamente il testo “Hello world!”.
describe('Hello world', function() { it('says hello', function() { expect(helloWorld()).toEqual('Hello world!'); });});
Jasmine fornisce un ricco set di matcher incorporati. Nell’esempio precedente, toEqual controlla l’uguaglianza tra il valore restituito dalla funzione helloWorld() e la stringa ‘Hello world! Questo è lo stesso delle asserzioni usate in altri framework di test. I matcher di Jasmine restituiscono semplicemente un valore booleano: true se l’aspettativa viene soddisfatta (un modo per indicare che il test è passato) o false se l’aspettativa non corrisponde. Una buona pratica è quella di mettere una singola aspettativa in una singola specifica di test it().
Altri matcher integrati includono toBe, toBeTruthy, toBeFalsy, toContain, toBeDefined, toBeUndefined, toBeNull, toBeNaN, toBeGreaterThan, toBeLessThan, toBeCloseTo. L’accoppiatore di identità toBe controlla se due cose sono lo stesso oggetto. Gli accoppiatori di condizione toBeTruthy, toBeFalsy valutano se qualcosa è vero o falso e toBeDefined, toBeUndefined controllano se qualcosa è definito o indefinito. Come suggerisce il nome, toBeNull controlla se qualcosa è nullo e toBeNaN controlla se qualcosa non è un numero (NaN). Il matcher di precisione toBeCloseTo accetta due parametri e controlla se un numero è vicino al primo parametro, data una certa quantità di precisione decimale indicata dal secondo parametro. Il matcher toContain è usato per verificare che un elemento, oggetto o sottostringa sia contenuto in un array, lista o stringa.
Lo speciale matcher integrato toThrow è usato per verificare che sia stata lanciata un’eccezione. Il codice sottostante verifica che sia stata lanciata “Some exception”.
describe('Expect to throw an exception', function() { it('throws some exception', function() { expect( function(){ throw('Some exception'); }).toThrow('Some exception'); });});
Jasmine ha una serie di altre caratteristiche, come matcher personalizzati, spie e supporto per specifiche asincrone.