Mam kilka testów jednostek roboczych dla różnych dyrektyw Angular (1.4.7), a do testowania używam Karmy, Jasmine i Sinon.
Próbuję dodać badanej jednostki do nowej dyrektywy, która jest tylko dyrektywa Obecnie mam, które wykorzystuje $window
ale widzę cryptic błąd w wyjścia konsoli:
TypeError: 'undefined' is not an object (evaluating 'this.proxy.toString')
ten błąd pochodzi sinon.js w linii 2372.
robię wszystkie „normalne” rzeczy w teście dyrektywa jednostkowych takich jak tworzenie fałszywego element, który ma dyrektywę jako atrybut:
testElement = document.createElement('div');
testElement.setAttribute('data-my-directive');
document.body.appendChild(testElement);
i opracowywania dyrektywy:
$compile(testElement)($scope);
używam $provide
spróbować makiety obiektu $window
:
module('app', function ($provide) {
$provide.value('$window', { id: 'test' });
});
Ale jak tylko próbuję użyć $window
w pliku testowane, błąd pokazane powyżej jest wyrzucane.
Jak mówię, mam kilka innych testów jednostkowych dla innych dyrektyw, usług i kontrolerów pracujących zgodnie z oczekiwaniami, więc wszystko wygląda prawidłowo. To tylko ten szczególny test.
Wszelkie pomysły?
Idealnie, spróbuję z nową wersją w poniedziałek. – danwellman
Przepraszamy za opóźnienie. Zrobiłem trochę więcej pracy nad tym, to * nie było * wersją Sinona, chociaż to było dobre połączenie. Myślę, że problem polegał na tym, że kod, który używał '$ window' w testowanym pliku, był również wewnątrz' $ document.ready() 'i wcześniej nie udało mi się go poprawnie odczytać. Zaznaczę to jako zaakceptowaną odpowiedź, ponieważ jest to jedyna odpowiedź, a także dlatego, że spowodowało, że pomyślałem o wszystkich aspektach testowanego kodu, a nie tylko o części korzystającej z '$ window', co było bezcenne. Dzięki! – danwellman