2014-06-20 22 views
16

Sono nuovo di Jasmine e di test in generale. Un blocco del mio codice controlla se la mia libreria è stata istanziata utilizzando il nuovo operatore:Test per l'istanza di utilizzo di Jasmine

//if 'this' isn't an instance of mylib... 
if (!(this instanceof mylib)) { 
    //return a new instance 
    return new mylib(); 
} 

Come posso testarlo utilizzando Jasmine?

+0

possibile duplicato di [Come utilizzare Jasmine per verificare se viene creata un'istanza?] (Http://stackoverflow.com/questions/23062034/how-to-use-jasmine-to-test-if-an-instance -è creato) – Chic

risposta

2

Jasmine usa i matcher per fare le sue asserzioni, così puoi scrivere il tuo matcher personalizzato per controllare tutto ciò che vuoi, inclusa un'istanza di controllo. https://github.com/pivotal/jasmine/wiki/Matchers

In particolare, controlla la sezione Scrivi nuovi giocatori.

31

Per verificare se qualcosa è un instanceof [Object] Jasmine offre ora jasmine.any:

it("matches any value", function() { 
    expect({}).toEqual(jasmine.any(Object)); 
    expect(12).toEqual(jasmine.any(Number)); 
}); 
4

io preferisco la più leggibile/intuitiva (a mio parere) utilizzare con l'operatore instanceof.

class Parent {} 
class Child extends Parent {} 

let c = new Child(); 

expect(c instanceof Child).toBeTruthy(); 
expect(c instanceof Parent).toBeTruthy(); 

Per ragioni di completezza è anche possibile utilizzare la proprietà prototipo constructor in alcuni casi.

expect(my_var_1.constructor).toBe(Array); 
expect(my_var_2.constructor).toBe(Object); 
expect(my_var_3.constructor).toBe(Error); 

// ... 

ATTENTI che questo non funzionerà se avete bisogno di controllare se un oggetto ereditato da un'altra oppure no.

class Parent {} 
class Child extends Parent {} 

let c = new Child(); 

console.log(c.constructor === Child); // prints "true" 
console.log(c.constructor === Parent); // prints "false" 

Se avete bisogno di supporto eredità sicuramente utilizzare l'operatore instanceof o la funzione jasmine.any() come Roger suggerito.

Object.prototype.constructor riferimento.

Problemi correlati