Angular: TestComponentBuilder.createAsync() löst sein Versprechen nicht ein

Erstellt am 7. Mai 2016  ·  3Kommentare  ·  Quelle: angular/angular

Angenommen, eine Komponente MyComponent stellt eine vereinfachte API für Demozwecke bereit und importiert die Symbole, die wir zum Durchführen der üblichen Komponententests benötigen:

import MyComponent from './my.component';
import {
  describe,
  expect,
  it,
  inject,
  beforeEach,
  beforeEachProviders } from '@angular/core/testing';
import { TestComponentBuilder } from '@angular/compiler/testing';

Ich versuche, einen grundlegenden Test durchzuführen, indem ich den TestComponentBuilder injiziere und instanziiere, um eine Fixture-Komponente vom Typ MyComponent zu erstellen, wie folgt:

describe('MyComponent', () => {
  let testComponentBuilder: TestComponentBuilder;

  beforeEachProviders(() => [TestComponentBuilder]);

  beforeEach(inject([TestComponentBuilder],  (_testComponentBuilder: TestComponentBuilder) => {
      testComponentBuilder = _testComponentBuilder;
    }
  ));

  it('should feature this or that behavior', done => {
    // We create a test component fixture on runtime out from the component symbol
    testComponentBuilder.createAsync(MyComponent).then(componentFixture => {

      // Here we proceed to run assertions on the componentFixture
      // ...

      done();
    })
    .catch(e => done.fail(e));
  });

Ich erhalte immer die gleiche Fehlermeldung, nachdem ich meinen Code auf RC.1 aktualisiert habe.

Error: No precompiled component MyComponent found

Grundsätzlich wird das von testComponentBuilder.createAsync(MyComponent) Versprechen nie gelöst. Das Problem ist bei allen meinen Tests konsistent, die die Verwendung von TestComponentBuilder .

Für die Aufzeichnung und bevor ich einen Test durchführe, konfiguriere ich die Testanbieter zuvor wie folgt:

import { setBaseTestProviders } from '@angular/core/testing';
import {
  TEST_BROWSER_STATIC_PLATFORM_PROVIDERS,
  TEST_BROWSER_STATIC_APPLICATION_PROVIDERS
} from '@angular/platform-browser/testing';

setBaseTestProviders(
  TEST_BROWSER_STATIC_PLATFORM_PROVIDERS,
  TEST_BROWSER_STATIC_APPLICATION_PROVIDERS
);

Ich habe den Code hoch und runter gescannt, um festzustellen, ob dies ein tatsächlicher Fehler in RC.1 oder ein Problem mit meinem Test-Setup ist, ohne Erfolg. Vor RC.1 funktionierte mein Test-Setup nahtlos in allen Spezifikationen, die speziell Komponenten getestet haben.

Irgendwelche Hinweise?

Hilfreichster Kommentar

Ich habe es selbst geschafft, dies zu beheben. Es stellte sich heraus, dass die Einrichtung meiner Anwendungs- und Plattformtestanbieter falsch war. Die Konfiguration des Setup-Skripts wie folgt hat den Zweck erfüllt:

import { resetBaseTestProviders, setBaseTestProviders } from '@angular/core/testing';
import { BROWSER_APP_DYNAMIC_PROVIDERS } from "@angular/platform-browser-dynamic";
import {
  TEST_BROWSER_STATIC_PLATFORM_PROVIDERS,
  ADDITIONAL_TEST_BROWSER_PROVIDERS
} from '@angular/platform-browser/testing';

resetBaseTestProviders();
setBaseTestProviders(
  TEST_BROWSER_STATIC_PLATFORM_PROVIDERS,
  [
    BROWSER_APP_DYNAMIC_PROVIDERS,
    ADDITIONAL_TEST_BROWSER_PROVIDERS
  ]
);

Mein Fehler! ;)

Alle 3 Kommentare

Ich habe es selbst geschafft, dies zu beheben. Es stellte sich heraus, dass die Einrichtung meiner Anwendungs- und Plattformtestanbieter falsch war. Die Konfiguration des Setup-Skripts wie folgt hat den Zweck erfüllt:

import { resetBaseTestProviders, setBaseTestProviders } from '@angular/core/testing';
import { BROWSER_APP_DYNAMIC_PROVIDERS } from "@angular/platform-browser-dynamic";
import {
  TEST_BROWSER_STATIC_PLATFORM_PROVIDERS,
  ADDITIONAL_TEST_BROWSER_PROVIDERS
} from '@angular/platform-browser/testing';

resetBaseTestProviders();
setBaseTestProviders(
  TEST_BROWSER_STATIC_PLATFORM_PROVIDERS,
  [
    BROWSER_APP_DYNAMIC_PROVIDERS,
    ADDITIONAL_TEST_BROWSER_PROVIDERS
  ]
);

Mein Fehler! ;)

@deeleman Ich habe dasselbe Problem mit dem Standard-Setup, das von ng-cli und https://github.com/juliemr/ng2-test-seed/blob/master/karma-test-shim.js verwendet wird : (

/*global jasmine, __karma__, window*/
Error.stackTraceLimit = Infinity;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;

__karma__.loaded = function () {
};

var distPath = '/base/.test/';
var appPath = distPath + 'app/';

function isJsFile(path) {
  return path.slice(-3) == '.js';
}

function isSpecFile(path) {
  return path.slice(-8) == '.spec.js';
}

function isAppFile(path) {
  return isJsFile(path) && (path.substr(0, appPath.length) == appPath);
}

var allSpecFiles = Object.keys(window.__karma__.files)
  .filter(isSpecFile)
  .filter(isAppFile);

// Load our SystemJS configuration.
System.config({
  baseURL: distPath,
});


System.import('system.config.js').then(function(e) {
  // Load and configure the TestComponentBuilder.
  return Promise.all([
    System.import('@angular/core/testing'),
    System.import('@angular/platform-browser-dynamic/testing')
  ]).then(function (providers) {
    var testing = providers[0];
    var testingBrowser = providers[1];
    testing.setBaseTestProviders(
      testingBrowser.TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      testingBrowser.TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS
    );
  });
}).then(function() {
  return Promise.all(
    allSpecFiles.map(function (moduleName) {
      return System.import(moduleName);
    }));
}).then(__karma__.start, __karma__.error);

Dieses Problem wurde aufgrund von Inaktivität automatisch gesperrt.
Bitte reichen Sie ein neues Problem ein, wenn Sie auf ein ähnliches oder verwandtes Problem stoßen.

Lesen Sie mehr über unsere Richtlinie zum automatischen Sperren von Konversationen .

_Diese Aktion wurde automatisch von einem Bot ausgeführt._

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen