2016-02-16 16 views
7

Ho un sacco di test di unità di lavoro per varie direttive Angular (1.4.7), e sto usando Karma, Jasmine e Sinon per i test.

Sto cercando di aggiungere un test di unità per una nuova direttiva, che è l'unica direttiva ho attualmente che utilizza $window ma sto vedendo un errore criptico nel output della console:

TypeError: 'undefined' is not an object (evaluating 'this.proxy.toString')

Questo l'errore viene da sinon.js alla linea 2372.

sto facendo tutte le cose 'normali' in una prova di unità direttiva come ad esempio la creazione di un elemento falso che ha la direttiva come un attributo:

testElement = document.createElement('div'); 
testElement.setAttribute('data-my-directive'); 
document.body.appendChild(testElement); 

e compilazione della direttiva:

$compile(testElement)($scope); 

sto usando $provide per provare finta all'oggetto $window:

module('app', function ($provide) { 
    $provide.value('$window', { id: 'test' }); 
}); 

Ma non appena si tenta di utilizzare $window nel file in fase di test, l'errore mostrato sopra viene lanciato.

Come ho detto, ho un sacco di altri test di unità per altre direttive, servizi e controller che funzionano come previsto, quindi tutto sembra essere configurato correttamente. È solo questo particolare test.

Qualche idea?

risposta

2

Non sono sicuro se questo è lo stesso problema, ma solo un paio di giorni fa una correzione al problema simile è stato ottenuto risolto il Sinon GitHub:

https://github.com/sinonjs/sinon/pull/833

Fix contiene linee:

var callStr = this.proxy ? this.proxy.toString() + "(" : ""; 

dove il controllo Null è una cosa e diverse altre righe.

Questa correzione è al file lib/sinon/call.js in commit 7a18eb5.

Non sono sicuro se questo è lo stesso, perché il file è diverso e lo è anche la linea. Eppure, questo è stato così interessante che avrei provato l'ultima versione di Sinon e vedere se questo è stato corretto. Può darsi, però, che un simile errore si verifichi in diverse parti del sinon, se il codificatore è lo stesso in entrambi i file.

+0

Perfetto, proverò con una nuova versione il lunedì. – danwellman

+0

Ci scusiamo per il ritardo. Ho fatto un po 'di lavoro su questo, non * era la versione di Sinon, anche se era una buona idea. Penso che il problema era che il codice che utilizzava '$ window' nel file sotto test era anche all'interno di un gestore' $ document.ready() 'e in precedenza non riuscivo a stub correttamente. Segnalo come la risposta accettata perché è l'unica risposta, e anche perché mi ha fatto pensare a tutti gli aspetti del codice sotto test, non solo alla parte che usa '$ window 'e che era inestimabile. Grazie! – danwellman

Problemi correlati