首页 文章

jhipster:使用外部模板对组件进行业力测试

提问于
浏览
0

Overview of the issue
你好,

我正试图在jhipster网关微服务中使用外部模板测试组件的html部分,如angular doc(https://angular.io/guide/testing#test-a-component-with-an-external-template)中所述 . 我已经像示例中一样生成了带有angular-cli的 Banner 组件,并设置了相同的测试 . 当我启动测试(纱线测试)时,我收到一个错误(参见下面的重现部分) .

我在一个空角项目中测试了相同的组件,它工作正常 .

我在jhipster生成的测试文件中看到模板被空的覆盖了,但我不明白为什么:

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

我不明白我做错了什么,我该怎么办才能使它运作良好......

谢谢你的帮助 .

马雷克
Motivation for or Use Case
我们应该能够在官方文档中测试jHipster项目中的html组件部分作为角度推荐 .
Reproduce the 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错误:'未处理承诺拒绝:','未能加载%3Ch1%3E%7B%7B Headers %7D%7D%3C / h1%3E',';区域:','ProxyZone',';任务:','Promise.then','; Value :','无法加载ERROR:'未处理的承诺拒绝:','无法加载%3Ch1%3E%7B%7B Headers %7D%7D%3C / h1%3E',';区域:','ProxyZone',';任务:','Promise.then',';值:','无法加载%3Ch1%3E%7B%7B Headers %7D%7D%3C / h1%3E',未定义PhantomJS 2.1.1(Linux 0.0.0):执行64 of 66 SUCCESS(0秒/1.547)错误:'未处理承诺拒绝:','未能加载%3Ch1%3E%7B%7B Headers %7D%7D%3C / h1%3E',';区域:','ProxyZone',';任务:','Promise.then',';值:','无法加载%3Ch1%3E%7B%7Btitle%7D%7D%3C / h1%3E',未定义PhantomJS 2.1.1(Linux 0.0.0)TestComponent应创建失败失败:未捕获(承诺) :无法加载%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 < - 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”,但它们从未编译过 . 请在测试前调用“TestBed.compileComponents” . 在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调用@ 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调用@ 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调用@ 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运行@ 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调用@ 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调用@ 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/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调用@ 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运行@ 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
JHipster Version(s)
jHipster v4.13.0(但与jHipster v4.11有同样的问题)
JHipster configuration
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

{
    "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实体生成的实体
Browsers and Operating System
操作系统:ubuntu 16.04

我已经使用PhantomJS和Chrome进行了测试,结果相同 .

1 回答

  • 0

    我终于发现了问题:在webpack配置中,我在angular2-template-loader中删除了keepurl = true:

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

    然后,在spec文件中,不要使用compileComponents函数(如下所示:https://angular.io/guide/webpack - 如果我正确理解......)

    您不预编译TypeScript; Webpack在内存中动态转换Typescript文件,并将发出的JS直接提供给Karma . 磁盘上没有临时文件 . karma-test-shim告诉Karma要预加载哪些文件并使用每个应用程序期望预加载的提供程序的测试版本来填充Angular测试框架 .

    所以你只需要一个像这样的人:

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

    不确定这是最好的解决方案,但对我有用!

相关问题