2017-06-01 75 views
1

template parse error在父項中使用子組件時。在父組件中使用子組件時出現錯誤 - Angular 2 Unit Testing(KarmaJasmine)

我有兩個組件。

1. CardComponent 
    2. InfoComponent 

我CardComponent的HTML

 <div class="footer"> 
     <full-info></full-info> 
    </div> 

CardComponent的規格文件:

beforeEach(async(() => { 
TestBed.configureTestingModule({ 
    declarations: [InfoComponent, CardComponent ], 
    imports: [ 
     FormsModule, 
     MaterialModule.forRoot() 
    ], 
    schemas: [ NO_ERRORS_SCHEMA ], //Used CUSTOM_ERRORS_SCHEMA also 
}) 
.compileComponents(); 
    })); 

我InfoComponent TS碼:

import { Component, Input } from '@angular/core'; 


    @Component({ 
      selector: 'full-info', 
      templateUrl: './full-info.component.html', 
      styleUrls: ['./full-info.component.css'] 
      }) 

    export class InfoComponent { 
    public fullInfo; 
    } 

InfoComponent規範聲明:

 beforeEach(async(() => { 
TestBed.configureTestingModule({ 
    declarations: [ InfoComponent ], 
    imports: [ 
     FormsModule, 
     MaterialModule.forRoot() 
    ], 
    schemas: [ NO_ERRORS_SCHEMA ] 
}) 
.compileComponents(); 
    })); 

當我運行測試用例這兩個組件個別然後它工作正常。

當我同時運行這些測試用例,然後我得到錯誤:

'full-info' is not a known element: 
1. If 'full-info' is an Angular component, then verify that it is part of this module. 
2. If 'full-info' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schemas' of this component to suppress this message. (" 
    </div> 
    <div class="footer"> 
    [ERROR ->]<full-info></full-info> 
    </div> 

我在CardComponent進口InfoComponent即使這樣,我得到這個錯誤。我無法找到問題。任何人都知道那對我來說會很好。

+0

從我看到的,你可以單獨測試'CardComponent'和'Inf​​oComponent'。這意味着在你的InfoComponent單元測試中,你確信InfoComponent正在按照預期工作。然後,在你的'CardComponent'測試中,你確信'CardComponent'按照預期工作。爲什麼一起測試它們?我的意思是,當你測試'CardComponent'時,你應該已經測試了'InfoComponent',對吧?因此,如果他們每個人的單元測試都通過了,那麼他們都是正確的,不是嗎? – SrAxi

+0

@SrAxi單獨測試意味着我使用'fdescribe'對每個測試進行測試。當我刪除'fdescribe'時,我得到錯誤。 – Dalvik

回答

0

這兩個組件是否共享完全相同的模塊? 模塊是否進口良好? 是forRoot()必要嗎?

documentation

Call forRoot only in the root application module, AppModule. Calling it in any other module, particularly in a lazy-loaded module, is contrary to the intent and can produce a runtime error.

Remember to import the result; don't add it to any other @NgModule list.

嘗試刪除forRoot(),看看問題是否解決。

希望我有幫助,讓我知道它是怎麼回事!

相關問題