Angular: TestComponentBuilder.createAsync () لا يفى بوعده

تم إنشاؤها على ٧ مايو ٢٠١٦  ·  3تعليقات  ·  مصدر: angular/angular

بالنظر إلى مكون MyComponent يعرض واجهة برمجة تطبيقات مبسطة لأغراض العرض ، واستيراد الرموز التي نحتاجها لإجراء اختبار المكونات المعتاد:

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

أحاول إجراء اختبار أساسي عن طريق الحقن وإنشاء مثيل TestComponentBuilder لإنشاء مكون ثابت من النوع MyComponent ، مثل هذا:

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

أحصل دائمًا على نفس الخطأ بعد ترقية الكود الخاص بي إلى RC.1.

Error: No precompiled component MyComponent found

في الأساس الوعد الذي أعاده testComponentBuilder.createAsync(MyComponent) لم يتم حله أبدًا. تتسق المشكلة في جميع اختباراتي التي تشمل استخدام TestComponentBuilder .

للتسجيل ، وقبل إجراء أي اختبار ، قمت مسبقًا بتهيئة موفري الاختبار على النحو التالي:

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

لقد قمت بمسح الرمز عاليًا ومنخفضًا لتحديد ما إذا كان هذا خطأ فعليًا في RC.1 أو مشكلة في إعداد الاختبار الخاص بي ، دون نجاح. قبل RC.1 ، كان إعداد الاختبار الخاص بي يعمل بسلاسة في جميع مكونات اختبار المواصفات على وجه التحديد.

أي مؤشرات؟

التعليق الأكثر فائدة

تمكنت من إصلاح هذا بنفسي. اتضح أن إعداد موفري اختبار التطبيق والنظام الأساسي الخاص بي كان خاطئًا. أدى تكوين برنامج الإعداد مثل هذا إلى الحيلة:

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

خطأي! ؛)

ال 3 كومينتر

تمكنت من إصلاح هذا بنفسي. اتضح أن إعداد موفري اختبار التطبيق والنظام الأساسي الخاص بي كان خاطئًا. أدى تكوين برنامج الإعداد مثل هذا إلى الحيلة:

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

خطأي! ؛)

deeleman أواجه نفس المشكلة مع الإعداد الافتراضي المستخدم بواسطة ng-cli و 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);

تم قفل هذه المشكلة تلقائيًا بسبب عدم النشاط.
يرجى تقديم مشكلة جديدة إذا كنت تواجه مشكلة مشابهة أو ذات صلة.

اقرأ المزيد حول سياسة قفل المحادثة التلقائي .

_تم تنفيذ هذا الإجراء تلقائيًا بواسطة روبوت.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات