2016-02-16 14 views
7

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?

Odpowiedz

2

Nie jestem pewien, czy jest to ten sam błąd, ale zaledwie kilka dni temu poprawka do podobnego problemu został got rozwiązany na sinon github:

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

Fix zawiera wiersze:

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

gdzie kontrola zerowa to jedno i kilka innych linii.

Ta poprawka znajduje się w pliku lib/sinon/call.js w zatwierdzeniu 7a18eb5.

Nie jestem pewien, czy to jest to samo, ponieważ plik jest inny, a więc także linia. Mimo to było to tak interesujące, że chciałbym wypróbować najnowszą wersję sinon i sprawdzić, czy to się naprawi. Być może jednak podobny błąd występuje w kilku częściach sinonu, jeśli koder jest na przykład taki sam w obu plikach.

+0

Idealnie, spróbuję z nową wersją w poniedziałek. – danwellman

+0

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

Powiązane problemy