E2E mock $ httpBackend właściwie nie przechodzi przeze mnie

Chociaż wierzę, że podążam zainstrukcje tutaj aby skonfigurować $ httpBackend do przekazywania wybranych żądań do serwera, to nie działa dla mnie.

Oto Plunkr z nieudanym testem to pokazuje, co robię i wyjaśnia w komentarzach, co wydaje się nie tak.

Moje spelunking sugeruje, że z jakiegoś powodu próba$httpBackend nie ma wewnętrznej kopii prawdziwego$httpBackend tak, że gdy nadejdzie czas przejścia przez żądanie XHR, przekazuje je do makiety$httpBackend zamiast. To drugie wywołanie zgłasza wyjątek, ponieważ nie wie, co zrobić z żądaniem.

Odpowiedź na dtabuenc

Pamiętam z uznaniem twój post podczas testów w połowie drogi. Identyfikujesz ważny zakres testów integracyjnych, które należą do testów jednostkowych i E2E. Stoję na tym środku.

Nie wydaje mi się, żebyś był wściekły. Twoja odpowiedź jest idealna rozsądnie ... lub tobyłoby rozsądne jeśli nie przeczy temu tekst „Odwołanie do API / ngMockE2E / $ httpBackend". Cytuję:

Ta implementacja może być użyta do odpowiedzi za pomocą odpowiedzi statycznych lub dynamicznych za pośrednictwemwhen api i jego skróty (whenGET, whenPOST, itp.) iopcjonalnie przekazuj żądania do rzeczywistego$httpBackend dla określonych żądań (np. w celu interakcji z niektórymi zdalnymi apis lub pobierania szablonów z serwera WWW) ...

[I] n kompleksowy scenariusz testowanialub w scenariuszu, w którym tworzona jest aplikacja z prawdziwym interfejsem API zastępowanym przez próbę, często pożądane jest, aby pewna kategoria żądań ominęła próbę iwystawić prawdziwe żądanie http .... Aby skonfigurować backend za pomocą tego zachowania, użyjpassThrough obsługa żądań kiedy zamiastrespond. [podkreślenie moje].

Dokumentacja milczy na temat E2E$httpBackend wykorzystanie w środowisku Jasmine. Nie mogę wymyślić powodu, by to wykluczyć. Jeśli jest taki powód, powinni to jasno określić. Poważnie, kto czyta odrwić komponent i nie przewiduje używania go w środowisku testowym?

Do "przekazywać żądania do realnego$httpBackend dla konkretnych żądań, np. do interakcji z niektórymi odległymi apis„To jest dokładnie to, co zamierzam zrobić. Co mogą one oznaczać przez„ prawdziwy $ httpBackend ”z wyjątkiem niefałszowanej wersji tego komponentu?

Nie rozumiem tego twierdzenia

ThengMocksE2E moduł jest przeznaczony do użycia po stronie „serwera” rzeczy, w których wykonywana jest rzeczywista aplikacja kątowa.

Słowo „serwer” pojawia się dokładnie 3 razy na tej stronie, nie sugerując tego ani razukażdy kod aplikacji zostanie wykonany na „serwerze”. Nie wiem, co masz na myśli mówiąc o „rzeczywistej aplikacji kątowej” wykonanej po „stronie” serwera.

Dokumentacja jest całkowicie jasna, że ​​E2E$httpBackend nie ogranicza się do testów E2E. To także dla ”scenariusz, w którym tworzona jest aplikacja z prawdziwym interfejsem API backendu zastąpionym makietą„

To tylko pół kroku od mojego scenariusza, w którymaplikacja jestprzetestowany z prawdziwym zapleczem api. ”

W moich scenariuszach SUT wywołuje komponent, który pobiera dane z serwera. Moje testy sprawdzają, czy temu zależnemu komponentowi udaje się wykonać takie żądania prawdziwego zaplecza i pobrać lub zapisać dane w oczekiwany sposób. Jest to test integracyjny, którego nie można odpowiednio zaspokoić, szydząc z zachowania zaplecza.

Oczywiście mogę przetestować (i wykonać test) z próbnymi odpowiedziami XHR, zdolność komponentu do właściwej reakcji na to, co japrzepowiadać, wywróżyć będzie zachowanie backendu. To nie to samo, co sprawdzanie, czy komponent odpowiada poprawnie narzeczywisty zachowanie backendu ... które może się zmienić wraz z rozwojem aplikacji i odejść od szyderczych odpowiedzi w znaczący sposób.

W tym celu rozważałbym użycie twojego testera pośredniego, jeśli zrozumiałbym, jak zamienić go na ścieżkę kodu SUT. Ja nie. Myślę, że komponent sprawiający, że żądania XHR są niedostępne dla twojegongMidwayTester. Ale wiem, jak skasować prawdziwego pomocnika XHR, jeśli będę musiał.

Tutaj właśnie stoję.

Albo ktoś może pokazać, jak to zrobić$httpBackend przekazuj niektóre żądania do serwera - jak głosi dokumentacja, że ​​może - lub zastąpiępassThrough wdrażam się z działającą implementacją XHR.

Wolę pierwszą opcję. Jeśli przejdziemy do drugiego, zaoferuję link do niego tutaj z korzyścią dla innych, którzy podzielają moje potrzeby i moją interpretację dokumentacji API.

Czy istnieje trzecia droga, którą tęsknię?

questionAnswers(4)

yourAnswerToTheQuestion