Невозможно интегрировать функциональность Angular Test Bed в тесты mocha. - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь интегрировать мокко тестирование в мое существующее приложение Angular и сталкивался со многими трудностями при этом. Я пытаюсь использовать Angular Test Bed , чтобы создать экземпляр экземпляра компонента и проверить, создан ли компонент. Но я сталкивался со многими ошибками, пытаясь исправить каждую ошибку, и, наконец, застрял. Любая помощь приветствуется.

Поскольку я пишу тестовые примеры для существующего Angular приложения, требования, которым я должен соответствовать,

  • записать тестовые файлы в машинопись
  • использование мокко + чай + sinon только, если это возможно
  • свести ручную настройку к минимуму.

Итак, я прошел шаги, упомянутые в документации по мокко и этого среднего поста .

Это мой тестовый файл login.component.test.ts сначала.

describe('LoginComponent', () => {
    let fixture: ComponentFixture<LoginComponent>;
    let component: LoginComponent;

    beforeEach(() => {
        TestBed.configureTestingModule({
            declarations: [LoginComponent],
        });
        fixture = TestBed.createComponent(LoginComponent);
        component = fixture.componentInstance;
    });

    afterEach(() => {
        TestBed.resetTestEnvironment();
    });

    it('create Login component', () => {
        assert.ok(component);
    });
});

Тогда я получил ошибку,

LoginComponent
       "before each" hook for "create Login component":
     TypeError: Cannot read property 'getComponentFromError' of null
      at TestBedViewEngine._initIfNeeded (D:\packages\core\testing\src\test_bed.ts:393:46)
      at TestBedViewEngine.createComponent (D:\packages\core\testing\src\test_bed.ts:594:10)
      at Function.TestBedViewEngine.createComponent (D:\packages\core\testing\src\test_bed.ts:247:36)
      at Context.<anonymous> (test\login.component.test.ts:13:27)

Затем, в соответствии с этим , я исправил это.

Сразу после исправления я получил эту ошибку.

  1) LoginComponent
       "before each" hook for "create Login component":
     Error: Can't resolve all parameters for ApplicationModule: (?).
      at syntaxError (D:\Testing\packages\compiler\src\util.ts:100:17)
      at CompileMetadataResolver._getDependenciesMetadata (D:\Testing\packages\compiler\src\metadata_resolver.ts:956:27)
      at CompileMetadataResolver._getTypeMetadata (D:\Testing\packages\compiler\src\metadata_resolver.ts:836:20)
      at CompileMetadataResolver.getNgModuleMetadata (D:\Testing\packages\compiler\src\metadata_resolver.ts:680:18)
      at CompileMetadataResolver.getNgModuleSummary (D:\Testing\packages\compiler\src\metadata_resolver.ts:450:31)
      at D:\Testing\packages\compiler\src\metadata_resolver.ts:586:44
      at Array.forEach (<anonymous>)
      at CompileMetadataResolver.getNgModuleMetadata (D:\Testing\packages\compiler\src\metadata_resolver.ts:569:43)
      at CompileMetadataResolver.getNgModuleSummary (D:\Testing\packages\compiler\src\metadata_resolver.ts:450:31)
      at D:\Testing\packages\compiler\src\metadata_resolver.ts:586:44
      at Array.forEach (<anonymous>)
      at CompileMetadataResolver.getNgModuleMetadata (D:\Testing\packages\compiler\src\metadata_resolver.ts:569:43)
      at CompileMetadataResolver.getNgModuleSummary (D:\Testing\packages\compiler\src\metadata_resolver.ts:450:31)
      at D:\Testing\packages\compiler\src\metadata_resolver.ts:586:44
      at Array.forEach (<anonymous>)
      at CompileMetadataResolver.getNgModuleMetadata (D:\Testing\packages\compiler\src\metadata_resolver.ts:569:43)
      at CompileMetadataResolver.getNgModuleSummary (D:\Testing\packages\compiler\src\metadata_resolver.ts:450:31)
      at D:\Testing\packages\compiler\src\metadata_resolver.ts:548:20
      at Array.forEach (<anonymous>)
      at CompileMetadataResolver.getNgModuleMetadata (D:\Testing\packages\compiler\src\metadata_resolver.ts:521:43)
      at JitCompiler._loadModules (D:\Testing\packages\compiler\src\jit\compiler.ts:127:49)
      at JitCompiler._compileModuleAndAllComponents (D:\Testing\packages\compiler\src\jit\compiler.ts:115:32)
      at JitCompiler.compileModuleAndAllComponentsSync (D:\Testing\packages\compiler\src\jit\compiler.ts:65:38)
      at CompilerImpl.compileModuleAndAllComponentsSync (D:\Testing\packages\platform-browser-dynamic\src\compiler_factory.ts:60:35)
      at TestingCompilerImpl.compileModuleAndAllComponentsSync (D:\packages\platform-browser-dynamic\testing\src\compiler_factory.ts:52:27)
      at TestBedViewEngine._initIfNeeded (D:\packages\core\testing\src\test_bed.ts:391:28)
      at TestBedViewEngine.createComponent (D:\packages\core\testing\src\test_bed.ts:594:10)
      at Function.TestBedViewEngine.createComponent (D:\packages\core\testing\src\test_bed.ts:247:36)
      at Context.<anonymous> (test\login.component.test.ts:15:27)

Я исправил это, добавив эту строку импорта.

import 'core-js/es7/reflect';

Затем произошла следующая ошибка.

LoginComponent
       "before each" hook for "create Login component":
     ReferenceError: XMLHttpRequest is not defined
      at ResourceLoaderImpl.get (D:\Testing\packages\platform-browser-dynamic\src\resource_loader\resource_loader_impl.ts:21:17)
      at DirectiveNormalizer._fetch (D:\Testing\packages\compiler\src\directive_normalizer.ts:58:37)
      at DirectiveNormalizer._preParseTemplate (D:\Testing\packages\compiler\src\directive_normalizer.ts:105:23)
      at DirectiveNormalizer.normalizeTemplate (D:\Testing\packages\compiler\src\directive_normalizer.ts:92:14)
      at CompileMetadataResolver.loadDirectiveMetadata (D:\Testing\packages\compiler\src\metadata_resolver.ts:260:54)
      at D:\Testing\packages\compiler\src\jit\compiler.ts:135:36
      at Array.forEach (<anonymous>)
      at D:\Testing\packages\compiler\src\jit\compiler.ts:133:65
      at Array.forEach (<anonymous>)
      at JitCompiler._loadModules (D:\Testing\packages\compiler\src\jit\compiler.ts:130:71)
      at JitCompiler._compileModuleAndAllComponents (D:\Testing\packages\compiler\src\jit\compiler.ts:115:32)
      at JitCompiler.compileModuleAndAllComponentsSync (D:\Testing\packages\compiler\src\jit\compiler.ts:65:38)
      at CompilerImpl.compileModuleAndAllComponentsSync (D:\Testing\packages\platform-browser-dynamic\src\compiler_factory.ts:60:35)
      at TestingCompilerImpl.compileModuleAndAllComponentsSync (D:\packages\platform-browser-dynamic\testing\src\compiler_factory.ts:52:27)
      at TestBedViewEngine._initIfNeeded (D:\packages\core\testing\src\test_bed.ts:391:28)
      at TestBedViewEngine.createComponent (D:\packages\core\testing\src\test_bed.ts:594:10)
      at Function.TestBedViewEngine.createComponent (D:\packages\core\testing\src\test_bed.ts:247:36)
      at Context.<anonymous> (test\login.component.test.ts:16:27)

Я уже, npm i xmlhttprequest --save-dev сделал это и попытался дать это как требование при запуске тестов, все еще без надежды.

Это мой tsconfig.json файл, если вы считаете его полезным.

{
    "compileOnSave": false,
    "compilerOptions": {
        "baseUrl": "./",
        "outDir": "./dist/out-tsc",
        "sourceMap": true,
        "declaration": false,
        "module": "commonjs",
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "importHelpers": true,
        "target": "es5",
        "types": ["node", "mocha"],
        "typeRoots": ["node_modules/@types"],
        "lib": ["es2018", "dom"],
        "paths": {
            "cComponents": ["dist/cComponents"],
            "cComponents/*": ["dist/cComponents/*"]
        }
    }
}

Я пролистал множество решений и все еще не смог исправить конфигурацию. Я дал историю исправления ошибок, чтобы спросить, вызвало ли что-либо, что я сделал, текущие ошибки. Любая помощь в настройке Мокко в моем приложении, чтобы исправить это, приветствуется. Когда я удаляю деталь и жестко кодирую случайное утверждение типа assert.ok(1), оно работает. Так что проблема в Угловом испытательном стенде часть, я думаю. Инъекции зависимостей также не предусмотрены для компонента. Если это ошибка, пожалуйста, помогите решить проблему. Если нет, то любая помощь очень ценится. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...