4
votes

Comment réparer "Erreur: devrait s'exécuter dans 'ProxyZone', mais il n'a pas été trouvé." dans les tests de moka?

J'essaie de tester mon application Tour of Heroes Angular en utilisant mocha , chai & webpack . J'ai suivi ce post et aussi avec l'aide de ce guide a>, j'ai effectué la configuration et j'ai corrigé les erreurs de construction et les tests en cours d'exécution.

Mais, mes tests échouent sauf pour le cas de test où je n'utilise pas async () dans le hook beforeEach .

Test de réussite

  "before each" hook for "should be created":
Error: Expected to be running in 'ProxyZone', but it was not found.
 at Function.ProxyZoneSpec.assertPresent (node_modules\zone.js\dist\proxy.js:42:19)
 at runInTestZone (node_modules\zone.js\dist\async-test.js:202:23)
 at D:\Practice\Tour-Of-Heroes\node_modules\zone.js\dist\async-test.js:185:17
 at new ZoneAwarePromise (node_modules\zone.js\dist\zone-node.js:910:29)
 at Context.<anonymous> (node_modules\zone.js\dist\async-test.js:184:20)

Test d'échec

//imports
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { DashboardComponent } from './dashboard.component';
import { HeroSearchComponent } from '../hero-search/hero-search.component';

import { RouterTestingModule } from '@angular/router/testing';
import { HeroService } from '../hero.service';
import { expect } from 'chai';

...

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [DashboardComponent, HeroSearchComponent],
      imports: [RouterTestingModule.withRoutes([])],
      providers: [{ provide: HeroService, useValue: heroService }]
    }).compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(DashboardComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should be created', () => {
    expect(component).to.exist;
  });


1 commentaires

5e erreur spécifique angulaire que j'ai frappée aujourd'hui. Ce cadre est un tel temps perdu.


4 Réponses :


0
votes

J'ai eu le même problème et la suppression de async de beforeEach (et it ) a résolu le problème. Le message d'erreur n'est pas du tout utile, mais je suppose que ce n'est pas facile à partir de l'endroit où il est généré pour détecter la cause première.


1 commentaires

Ya le problème est que j'ai besoin de tester le code asynchrone et la suppression de l'async n'est pas une option lorsque j'arrive à cette partie.



0
votes

Voici la réponse à cette question.

Angular 5 Testing: devrait s'exécuter dans 'ProxyZone', mais il n'a pas été trouvé

Fondamentalement, cette exception est due à une erreur position d'un mot-clé asynchrone. Supprimez l'async de beforeEach et ajoutez-le sur "it"

it('should be created', fakeAsync(() => {
    expect(component).to.exist;
  });


0 commentaires

11
votes

J'ai eu le même problème lorsque j'ai accidentellement utilisé fakeAsync dans une fonction describe .

La suppression a résolu le problème pour moi.


2 commentaires

C'était mon problème. J'ai mis le fackAsync () autour de ma fonction describe () par accident plutôt que autour de la fonction it ().


🤬 Deuxième fois en 1 semaine, j'avais besoin d'ouvrir Google pour finir sur ce message SO 😜



0
votes

Je vois quelques problèmes ici.

Vous en avez 2 avant chacun. Vous ne devriez en avoir qu'un. Si vous avez async sur votre bloc de code de test, vous devez appeler wait sur une fonction et / ou utiliser flush ou tick pour progresser. J'utilise généralement fakeAsync pour les observables et async / await pour les vraies méthodes async.

Pour cet exemple spécifique, vous ne devriez pas du tout avoir besoin de l'async.


0 commentaires