Angular: TestComponentBuilder.createAsync() tidak menyelesaikan janjinya

Dibuat pada 7 Mei 2016  ·  3Komentar  ·  Sumber: angular/angular

Mengingat komponen MyComponent mengekspos API sederhana untuk tujuan demo, dan mengimpor simbol yang kami perlukan untuk melakukan pengujian komponen biasa:

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

Saya mencoba melakukan tes dasar dengan menyuntikkan dan membuat instance TestComponentBuilder untuk membuat komponen fixture dari tipe MyComponent , seperti ini:

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));
  });

Saya selalu mendapatkan kesalahan yang sama setelah memutakhirkan kode saya ke RC.1.

Error: No precompiled component MyComponent found

Pada dasarnya janji yang dikembalikan oleh testComponentBuilder.createAsync(MyComponent) tidak pernah diselesaikan. Masalahnya konsisten pada semua pengujian saya yang mencakup penggunaan TestComponentBuilder .

Sebagai catatan, dan sebelum melakukan pengujian apa pun, saya sebelumnya mengonfigurasi penyedia pengujian seperti ini:

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
);

Saya telah memindai kode tinggi dan rendah untuk menentukan apakah ini adalah bug yang sebenarnya di RC.1 atau masalah dengan pengaturan pengujian saya, tanpa hasil. Sebelum RC.1, pengaturan pengujian saya bekerja dengan mulus di semua komponen pengujian spesifikasi secara khusus.

Ada petunjuk?

Komentar yang paling membantu

Saya berhasil memperbaiki ini sendiri. Ternyata pengaturan penyedia pengujian aplikasi dan platform saya salah. Mengonfigurasi skrip pengaturan seperti ini berhasil:

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
  ]
);

Salahku! ;)

Semua 3 komentar

Saya berhasil memperbaiki ini sendiri. Ternyata pengaturan penyedia pengujian aplikasi dan platform saya salah. Mengonfigurasi skrip pengaturan seperti ini berhasil:

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
  ]
);

Salahku! ;)

@deeleman Saya mengalami masalah yang sama dengan pengaturan default yang digunakan oleh ng-cli dan https://github.com/juliemr/ng2-test-seed/blob/master/karma-test-shim.js : (

/*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);

Masalah ini telah dikunci secara otomatis karena tidak ada aktivitas.
Silakan ajukan masalah baru jika Anda mengalami masalah serupa atau terkait.

Baca lebih lanjut tentang kebijakan penguncian percakapan otomatis kami.

_Tindakan ini telah dilakukan secara otomatis oleh bot._

Apakah halaman ini membantu?
0 / 5 - 0 peringkat