Я пытаюсь интегрировать мокко тестирование в мое существующее приложение 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)
, оно работает. Так что проблема в Угловом испытательном стенде часть, я думаю. Инъекции зависимостей также не предусмотрены для компонента. Если это ошибка, пожалуйста, помогите решить проблему. Если нет, то любая помощь очень ценится. Заранее спасибо.