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?
Perfetto, proverò con una nuova versione il lunedì. – danwellman
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