简体   繁体   English

jhipster:使用外部模板在组件上运行业力测试

[英]jhipster : Running karma tests on component with external template

Overview of the issue 问题概述

Hello, 你好,

I'm trying to test the html part of a component with external template in a jhipster gateway microservice, as describe in the angular doc ( https://angular.io/guide/testing#test-a-component-with-an-external-template ). 我正在尝试在jhipster网关微服务中使用外部模板测试组件的html部分,如angular文档( https://angular.io/guide/testing#test-a-component-with-an-外部模板 )。 I've generated the banner component with angular-cli excally as in the example and set the same test. 如示例中一样,我已经使用angular-cli生成了banner组件,并设置了相同的测试。 When I launch tests (yarn test), I get an error (see reproduce section below). 启动测试(纱线测试)时,出现错误(请参见下面的“ 重现”部分 )。

I've tested the same component in an empty angular project and it works fine. 我已经在一个空的角度项目中测试了相同的组件,并且工作正常。

I've seen in the test files generated by jhipster that the template is overrided by an empty one, but I don't understant why : 我已经在jhipster生成的测试文件中看到模板被一个空模板覆盖,但是我不明白为什么:

 beforeEach(async(() => { TestBed.configureTestingModule({ imports: [MyAppTestModule], declarations: [TrucComponent], providers: [ TrucService ] }) .overrideTemplate(TrucComponent, '') // If removed, get the same compile error .compileComponents(); })); 

I don't understand what I'm doing wrong, and what should I do to make it works fine... 我不明白自己在做什么错,应该怎么做才能使其正常工作...

Thanks for your help. 谢谢你的帮助。

Marek 马雷克

Motivation for or Use Case 动机或用例

We should be able to test html component part in jHipster project as angular recommand it in the official doc. 我们应该能够在jHipster项目中测试html组件,作为正式文档中的有角度建议。

Reproduce the error 重现错误
  1. Create the banner component and fill the code with example found here ( https://embed.plnkr.co/?show=preview&show=app%2Fbanner.component.spec.ts ) 创建标题组件,并使用此处的示例填充代码( https://embed.plnkr.co/?show=preview&show=app%2Fbanner.component.spec.ts

  2. Create the test file in the /test/javascript/spec directory, change path in the import to correctly load the component 在/ test / javascript / spec目录中创建测试文件,在导入中更改路径以正确加载组件

  3. Launch yarn test 发射yarn test

  4. Shoud get this kind of error 应该得到这种错误

20 12 2017 13:57:47.328:WARN [web-server]: 404: /%3Ch1%3E%7B%7Btitle%7D%7D%3C/h1%3E 20 12 2017 13:57:47.352:WARN [web-server]: 404: /%3Ch1%3E%7B%7Btitle%7D%7D%3C/h1%3E 20 12 2017 13:57:47.372:WARN [web-server]: 404: /%3Ch1%3E%7B%7Btitle%7D%7D%3C/h1%3E 20 12 2017 13:57:47.328:WARN [Web服务器]:404:/%3Ch1%3E%7B%7Btitle%7D%7D%3C / h1%3E 20 12 2017 13:57:47.352:WARN [web-服务器]:404:/%3Ch1%3E%7B%7Btitle%7D%7D%3C / h1%3E 20 12 2017 13:57:47.372:警告[网络服务器]:404:/%3Ch1%3E%7B% 7Btitle%7D%7D%3C / h1%3E

ERROR: 'Unhandled Promise rejection:', 'Failed to load %3Ch1%3E%7B%7Btitle%7D%7D%3C/h1%3E', '; 错误:“未处理的承诺拒绝:”,“无法加载%3Ch1%3E%7B%7Btitle%7D%7D%3C / h1%3E”,'; Zone:', 'ProxyZone', '; 区域:','ProxyZone','; Task:', 'Promise.then', '; 任务:','Promise.then','; Value:', 'Failed to loadERROR: 'Unhandled Promise rejection:', 'Failed to load %3Ch1%3E%7B%7Btitle%7D%7D%3C/h1%3E', '; 值:','无法加载错误:'未处理的承诺拒绝:','无法加载%3Ch1%3E%7B%7Btitle%7D%7D%3C / h1%3E','; Zone:', 'ProxyZone', '; 区域:','ProxyZone','; Task:', 'Promise.then', '; 任务:','Promise.then','; Value:', 'Failed to load %3Ch1%3E%7B%7Btitle%7D%7D%3C/h1%3E', undefined PhantomJS 2.1.1 (Linux 0.0.0): Executed 64 of 66 SUCCESS (0 secs / 1.547 secs) ERROR: 'Unhandled Promise rejection:', 'Failed to load %3Ch1%3E%7B%7Btitle%7D%7D%3C/h1%3E', '; 值:','无法加载%3Ch1%3E%7B%7Btitle%7D%7D%3C / h1%3E',未定义PhantomJS 2.1.1(Linux 0.0.0):执行64之66成功(0秒/ 1.547错误:“未处理的承诺拒绝:”,“无法加载%3Ch1%3E%7B%7Btitle%7D%7D%3C / h1%3E”,'; Zone:', 'ProxyZone', '; 区域:','ProxyZone','; Task:', 'Promise.then', '; 任务:','Promise.then','; Value:', 'Failed to load %3Ch1%3E%7B%7Btitle%7D%7D%3C/h1%3E', undefined PhantomJS 2.1.1 (Linux 0.0.0) TestComponent should create FAILED Failed: Uncaught (in promise): Failed to load %3Ch1%3E%7B%7Btitle%7D%7D%3C/h1%3E resolvePromise@webpack:///node_modules/zone.js/dist/zone.js:784:0 <- spec/entry.ts:120708:78 resolvePromise@webpack:///node_modules/zone.js/dist/zone.js:754:0 <- spec/entry.ts:120678:31 webpack:///node_modules/zone.js/dist/zone.js:831:0 <- spec/entry.ts:120755:31 invokeTask@webpack:///node_modules/zone.js/dist/zone.js:424:0 <- spec/entry.ts:120348:36 onInvokeTask@webpack:///node_modules/zone.js/dist/proxy.js:103:0 <- spec/entry.ts:123417:49 invokeTask@webpack:///node_modules/zone.js/dist/zone.js:423:0 <- spec/entry.ts:120347:48 runTask@webpack:///node_modules/zone.js/dist/zone.js:191:0 <- spec/entry.ts:120115:57 drainMicroTaskQueue@webpack:///node_modules/zone.js/dist/zone.js:595:0 <- spec/entry.ts:120519:42 run@webpack:///node_modules/core-js/modules/es6.promise.js:87:0 值:','无法加载%3Ch1%3E%7B%7Btitle%7D%7D%3C / h1%3E',未定义PhantomJS 2.1.1(Linux 0.0.0)TestComponent应该创建FAILED失败:未被捕获(承诺) :无法加载%3Ch1%3E%7B%7Btitle%7D%7D%3C / h1%3E resolvePromise @ webpack:///node_modules/zone.js/dist/zone.js:784:0 <-spec / entry。 ts:120708:78 resolvePromise @ webpack:///node_modules/zone.js/dist/zone.js:754:0 <-spec / entry.ts:120678:31 webpack:///node_modules/zone.js/dist /zone.js:831:0 <-spec / entry.ts:120755:31 invokeTask @ webpack:///node_modules/zone.js/dist/zone.js:424:0 <-spec / entry.ts:120348 :36 onInvokeTask @ webpack:///node_modules/zone.js/dist/proxy.js:103:0 <-spec / entry.ts:123417:49 invokeTask @ webpack:///node_modules/zone.js/dist/ zone.js:423:0 <-spec / entry.ts:120347:48 runTask @ webpack:///node_modules/zone.js/dist/zone.js:191:0 <-spec / entry.ts:120115: 57rainMicroTaskQueue @ webpack:///node_modules/zone.js/dist/zone.js:595:0 <-spec / entry.ts:120519:42 run @ webpack:/// node_modules / core-js / modules / es6 .promise.js:87:0 <- spec/entry.ts:118081:29 webpack:///node_modules/core-js/modules/es6.promise.js:100:0 <- spec/entry.ts:118094:31 flush@webpack:///node_modules/core-js/modules/_microtask.js:18:0 <- spec/entry.ts:57932:11 Error: This test module uses the component TestComponent which is using a "templateUrl" or "styleUrls", but they were never compiled. <-spec / entry.ts:118081:29 webpack:///node_modules/core-js/modules/es6.promise.js:100:0 <-spec / entry.ts:118094:31 flush @ webpack:// /node_modules/core-js/modules/_microtask.js:18:0 <-spec / entry.ts:57932:11错误:此测试模块使用的组件TestComponent正在使用“ templateUrl”或“ styleUrls”,但它们从来没有被编译过。 Please call "TestBed.compileComponents" before your test. 请在测试前调用“ TestBed.compileComponents”。 in spec/entry.ts (line 19172) _initIfNeeded@webpack:///node_modules/@angular/core/esm5/testing.js:979:0 <- spec/entry.ts:19172:87 createComponent@webpack:///node_modules/@angular/core/esm5/testing.js:1125:0 <- spec/entry.ts:19318:27 createComponent@webpack:///node_modules/@angular/core/esm5/testing.js:832:0 <- spec/entry.ts:19025:44 webpack:///src/test/javascript/spec/app/test/test.component.spec.ts:21:42 <- spec/entry.ts:115542:52 invoke@webpack:///node_modules/zone.js/dist/zone.js:391:0 <- spec/entry.ts:120315:31 onInvoke@webpack:///node_modules/zone.js/dist/proxy.js:79:0 <- spec/entry.ts:123393:45 invoke@webpack:///node_modules/zone.js/dist/zone.js:390:0 <- spec/entry.ts:120314:40 run@webpack:///node_modules/zone.js/dist/zone.js:141:0 <- spec/entry.ts:120065:49 webpack:///node_modules/zone.js/dist/jasmine-patch.js:104:0 <- spec/entry.ts:123552:37 webpack:///node_modules/@angular/core/esm5/testing.js:51:0 <- spec/entry.ts:18244:30 webpack:///node_modules/@angular/core/esm5/testing.js 在spec / entry.ts(第19172行)_initIfNeeded @ webpack:///node_modules/@angular/core/esm5/testing.js:979:0 <-spec / entry.ts:19172:87 createComponent @ webpack:// /node_modules/@angular/core/esm5/testing.js:1125:0 <-spec / entry.ts:19318:27 createComponent @ webpack:///node_modules/@angular/core/esm5/testing.js:832: 0 <-spec / entry.ts:19025:44 webpack:///src/test/javascript/spec/app/test/test.component.spec.ts:21:42 <-spec / entry.ts:115542: 52 invoke @ webpack:///node_modules/zone.js/dist/zone.js:391:0 <-spec / entry.ts:120315:31 onInvoke @ webpack:///node_modules/zone.js/dist/proxy .js:79:0 <-spec / entry.ts:123393:45 invoke @ webpack:///node_modules/zone.js/dist/zone.js:390:0 <-spec / entry.ts:120314:40 run @ webpack:///node_modules/zone.js/dist/zone.js:141:0 <-spec / entry.ts:120065:49 webpack:///node_modules/zone.js/dist/jasmine-patch。 js:104:0 <-spec / entry.ts:123552:37 webpack:///node_modules/@angular/core/esm5/testing.js:51:0 <-spec / entry.ts:18244:30 webpack: ///node_modules/@angular/core/esm5/testing.js :102:0 <- spec/entry.ts:18295:29 invoke@webpack:///node_modules/zone.js/dist/zone.js:391:0 <- spec/entry.ts:120315:31 onInvoke@webpack:///node_modules/zone.js/dist/async-test.js:49:0 <- spec/entry.ts:122870:45 onInvoke@webpack:///node_modules/zone.js/dist/proxy.js:76:0 <- spec/entry.ts:123390:47 invoke@webpack:///node_modules/zone.js/dist/zone.js:390:0 <- spec/entry.ts:120314:40 run@webpack:///node_modules/zone.js/dist/zone.js:141:0 <- spec/entry.ts:120065:49 webpack:///node_modules/@angular/core/esm5/testing.js:97:0 <- spec/entry.ts:18290:28 onHandleError@webpack:///node_modules/zone.js/dist/async-test.js:59:0 <- spec/entry.ts:122880:31 onHandleError@webpack:///node_modules/zone.js/dist/proxy.js:84:0 <- spec/entry.ts:123398:52 handleError@webpack:///node_modules/zone.js/dist/zone.js:395:0 <- spec/entry.ts:120319:50 runGuarded@webpack:///node_modules/zone.js/dist/zone.js:157:0 <- spec/entry.ts:120081:55 _loop_1@webpack:///node_modules/zone.js/dist/zone.js:666:0 <- spec/entry.ts:120590: :102:0 <-spec / entry.ts:18295:29 invoke @ webpack:///node_modules/zone.js/dist/zone.js:391:0 <-spec / entry.ts:120315:31 onInvoke @ webpack:///node_modules/zone.js/dist/async-test.js:49:0 <-spec / entry.ts:122870:45 onInvoke @ webpack:///node_modules/zone.js/dist/proxy。 js:76:0 <-spec / entry.ts:123390:47 invoke @ webpack:///node_modules/zone.js/dist/zone.js:390:0 <-spec / entry.ts:120314:40运行@webpack:///node_modules/zone.js/dist/zone.js:141:0 <-spec / entry.ts:120065:49 webpack:///node_modules/@angular/core/esm5/testing.js: 97:0 <-spec / entry.ts:18290:28 onHandleError @ webpack:///node_modules/zone.js/dist/async-test.js:59:0 <-spec / entry.ts:122880:31 onHandleError @webpack:///node_modules/zone.js/dist/proxy.js:84:0 <-spec / entry.ts:123398:52 handleError @ webpack:///node_modules/zone.js/dist/zone.js :395:0 <-spec / entry.ts:120319:50 runGuarded @ webpack:///node_modules/zone.js/dist/zone.js:157:0 <-spec / entry.ts:120081:55 _loop_1 @ webpack:///node_modules/zone.js/dist/zone.js:666:0 <-spec / entry.ts:120590: 57 microtaskDrainDone@webpack:///node_modules/zone.js/dist/zone.js:675:0 <- spec/entry.ts:120599:24 drainMicroTaskQueue@webpack:///node_modules/zone.js/dist/zone.js:603:0 <- spec/entry.ts:120527:36 run@webpack:///node_modules/core-js/modules/es6.promise.js:87:0 <- spec/entry.ts:118081:29 webpack:///node_modules/core-js/modules/es6.promise.js:100:0 <- spec/entry.ts:118094:31 flush@webpack:///node_modules/core-js/modules/_microtask.js:18:0 <- spec/entry.ts:57932:11 Expected undefined to be truthy. 57 microtaskDrainDone @ webpack:///node_modules/zone.js/dist/zone.js:675:0 <-spec / entry.ts:120599:24rainMicroTaskQueue @ webpack:///node_modules/zone.js/dist/zone .js:603:0 <-spec / entry.ts:120527:36 run @ webpack:///node_modules/core-js/modules/es6.promise.js:87:0 <-spec / entry.ts:118081 :29 webpack:///node_modules/core-js/modules/es6.promise.js:100:0 <-spec / entry.ts:118094:31 flush @ webpack:/// node_modules / core-js / modules / _microtask.js:18:0 <-spec / entry.ts:57932:11预期未定义是真实的。 webpack:///src/test/javascript/spec/app/test/test.component.spec.ts:31:36 <- spec/entry.ts:115550:37 invoke@webpack:///node_modules/zone.js/dist/zone.js:391:0 <- spec/entry.ts:120315:31 onInvoke@webpack:///node_modules/zone.js/dist/proxy.js:79:0 <- spec/entry.ts:123393:45 invoke@webpack:///node_modules/zone.js/dist/zone.js:390:0 <- spec/entry.ts:120314:40 run@webpack:///node_modules/zone.js/dist/zone.js:141:0 <- spec/entry.ts:120065:49 webpack:///node_modules/zone.js/dist/jasmine-patch.js:104:0 <- spec/entry.ts:123552:37 webpack:///node_modules/@angular/core/esm5/testing.js:51:0 <- spec/entry.ts:18244:30 webpack:///node_modules/@angular/core/esm5/testing.js:102:0 <- spec/entry.ts:18295:29 invoke@webpack:///node_modules/zone.js/dist/zone.js:391:0 <- spec/entry.ts:120315:31 onInvoke@webpack:///node_modules/zone.js/dist/async-test.js:49:0 <- spec/entry.ts:122870:45 onInvoke@webpack:///node_modules/zone.js/dist/proxy.js:76:0 <- spec/entry.ts:123390:47 invoke@webpack:///node_modules/zone.js webpack:///src/test/javascript/spec/app/test/test.component.spec.ts:31:36 <-spec / entry.ts:115550:37 invoke @ webpack:/// node_modules / zone。 js / dist / zone.js:391:0 <-spec / entry.ts:120315:31 onInvoke @ webpack:///node_modules/zone.js/dist/proxy.js:79:0 <-spec / entry。 ts:123393:45 invoke @ webpack:///node_modules/zone.js/dist/zone.js:390:0 <-spec / entry.ts:120314:40 run @ webpack:///node_modules/zone.js /dist/zone.js:141:0 <-spec / entry.ts:120065:49 webpack:///node_modules/zone.js/dist/jasmine-patch.js:104:0 <-spec / entry.ts :123552:37 webpack:///node_modules/@angular/core/esm5/testing.js:51:0 <-spec / entry.ts:18244:30 webpack:/// node_modules / @ angular / core / esm5 / testing.js:102:0 <-spec / entry.ts:18295:29 invoke @ webpack:///node_modules/zone.js/dist/zone.js:391:0 <-spec / entry.ts:120315: 31 onInvoke @ webpack:///node_modules/zone.js/dist/async-test.js:49:0 <-spec / entry.ts:122870:45 onInvoke @ webpack:///node_modules/zone.js/dist /proxy.js:76:0 <-spec / entry.ts:123390:47 invoke @ webpack:///node_modules/zone.js /dist/zone.js:390:0 <- spec/entry.ts:120314:40 run@webpack:///node_modules/zone.js/dist/zone.js:141:0 <- spec/entry.ts:120065:49 webpack:///node_modules/@angular/core/esm5/testing.js:97:0 <- spec/entry.ts:18290:28 onHandleError@webpack:///node_modules/zone.js/dist/async-test.js:59:0 <- spec/entry.ts:122880:31 onHandleError@webpack:///node_modules/zone.js/dist/proxy.js:84:0 <- spec/entry.ts:123398:52 handleError@webpack:///node_modules/zone.js/dist/zone.js:395:0 <- spec/entry.ts:120319:50 runGuarded@webpack:///node_modules/zone.js/dist/zone.js:157:0 <- spec/entry.ts:120081:55 _loop_1@webpack:///node_modules/zone.js/dist/zone.js:666:0 <- spec/entry.ts:120590:57 microtaskDrainDone@webpack:///node_modules/zone.js/dist/zone.js:675:0 <- spec/entry.ts:120599:24 drainMicroTaskQueue@webpack:///node_modules/zone.js/dist/zone.js:603:0 <- spec/entry.ts:120527:36 run@webpack:///node_modules/core-js/modules/es6.promise.js:87:0 <- spec/entry.ts:118081:29 webpack:///node_modules/core-js/modules/es6.pr /dist/zone.js:390:0 <-spec / entry.ts:120314:40 run @ webpack:///node_modules/zone.js/dist/zone.js:141:0 <-spec / entry.ts :120065:49 webpack:///node_modules/@angular/core/esm5/testing.js:97:0 <-spec / entry.ts:18290:28 onHandleError @ webpack:///node_modules/zone.js/dist /async-test.js:59:0 <-spec / entry.ts:122880:31 onHandleError @ webpack:///node_modules/zone.js/dist/proxy.js:84:0 <-spec / entry.ts :123398:52 handleError @ webpack:///node_modules/zone.js/dist/zone.js:395:0 <-spec / entry.ts:120319:50 runGuarded @ webpack:///node_modules/zone.js/ dist / zone.js:157:0 <-spec / entry.ts:120081:55 _loop_1 @ webpack:///node_modules/zone.js/dist/zone.js:666:0 <-spec / entry.ts: 120590:57 microtaskDrainDone @ webpack:///node_modules/zone.js/dist/zone.js:675:0 <-spec / entry.ts:120599:24rainMicroTaskQueue @ webpack:///node_modules/zone.js/dist /zone.js:603:0 <-spec / entry.ts:120527:36 run @ webpack:///node_modules/core-js/modules/es6.promise.js:87:0 <-spec / entry.ts :118081:29 webpack:///node_modules/core-js/modules/es6.pr omise.js:100:0 <- spec/entry.ts:118094:31 omise.js:100:0 <-spec / entry.ts:118094:31

JHipster Version(s) JHipster版本

jHipster v4.13.0 (but get same problem with jHipster v4.11) jHipster v4.13.0(但jHipster v4.11遇到相同的问题)

JHipster configuration JHipster配置

Jhipster info Jhipster资讯

 openjdk version "1.8.0_151" OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12) OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode) git version 2.7.4 node: v6.11.3 npm: 3.10.10 yeoman: 2.0.0 yarn: 1.3.2 Docker version 17.11.0-ce, build 1caf76c docker-compose version 1.17.0, build ac53b73 

.yo-rc.json .yo-rc.json

 { "generator-jhipster": { "promptValues": { "packageName": "com.mycompany.myapp", "nativeLanguage": "fr" , "jhipsterVersion": "4.13.0", "baseName": "myApp", "packageName": "com.mycompany.myapp", "packageFolder": "com/mycompany/myapp", "serverPort": "8080", "authenticationType": "jwt", "hibernateCache": "hazelcast", "clusteredHttpSession": false, "websocket": false, "databaseType": "sql", "devDatabaseType": "h2Disk", "prodDatabaseType": "mysql", "searchEngine": false, "messageBroker": false, "serviceDiscoveryType": "eureka", "buildTool": "maven", "enableSocialSignIn": false, "enableSwaggerCodegen": false, "jwtSecretKey": "eba2f264cf18b922d9e32b63d8ed8aecb16794e1", "clientFramework": "angularX", "useSass": true, "clientPackageManager": "yarn", "applicationType": "gateway", "testFrameworks": [], "jhiPrefix": "jhi", "enableTranslation": true, "nativeLanguage": "fr", "languages": [ "fr", "en" ] } } 
Entity configuration(s) entityName.json files generated in the .jhipster directory .jhipster目录中生成的实体配置entityName.json文件

No entity generated with jhipster entity 没有使用jhipster实体生成的实体

Browsers and Operating System 浏览器和操作系统

Operating system: ubuntu 16.04 作业系统:ubuntu 16.04

I've tested with PhantomJS and Chrome, same results. 我已经使用PhantomJS和Chrome进行了测试,结果相同。

I finally found out the problem : in the webpack configuration, I removed the keepurl=true in the angular2-template-loader : 我终于发现了问题:在webpack配置中,我删除了angular2-template-loader中的keepurl = true:

{
    test: /\.ts$/,
    loaders: ['awesome-typescript-loader', 'angular2-template-loader'], //remove ?keepUrl=true
    exclude: /node_modules/
}

and then, in the spec files, don't use compileComponents function (as explain here : https://angular.io/guide/webpack - if I've correctly understood...) 然后,在规格文件中,不要使用compileComponents函数(如此处解释: https ://angular.io/guide/webpack-如果我正确理解...)

You don't precompile the TypeScript; 您无需预编译TypeScript; Webpack transpiles the Typescript files on the fly, in memory, and feeds the emitted JS directly to Karma. Webpack会在内存中动态转换Typescript文件,并将发出的JS直接提供给Karma。 There are no temporary files on disk. 磁盘上没有临时文件。

The karma-test-shim tells Karma what files to pre-load and primes the Angular test framework with test versions of the providers that every app expects to be pre-loaded. karma-test-shim告诉Karma要预加载哪些文件,并使用每个应用程序都希望预加载的提供程序的测试版本来初始化Angular测试框架。

So you just neeed one beforeeach like this : 因此,您只需要像这样先学习一下:

beforeEach(() => {
            TestBed.configureTestingModule({
                imports: [MyAppTestModule],
                declarations: [TrucComponent],
                providers: [
                    TrucService
                ]
            });
        });

Not sure it's the best solution, but works for me ! 不确定这是最佳解决方案,但对我有用!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM