2017-07-03 135 views
3

我試着做一些測試,在中有一個子組件:角2 - 與injectionToken依賴模擬組件

這是父組件的模板:

<header></header> 
<snackbar></snackbar> 

這個小吃吧部件是當我嘗試測試父組件時,它會給我帶來問題:快餐欄組件與injectToken之間存在依賴關係,用於向組件傳遞組件需要的appConfig(一些常量)。了AppConfig注入到小吃吧成分是這樣的:

import { APP_CONFIG, AppConfig } from '../../../../app.config'; 

export class SnackbarComponent implements OnInit { 

    private config: MdSnackBarConfig; 

    constructor(
    @Inject(APP_CONFIG) config: AppConfig 
) { 
    let snackBarConfig = new MdSnackBarConfig(); 
    this.config = snackBarConfig; 
    } 
} 

父組件測試好,但是當嘗試解析小吃吧部件依賴它,因爲它無法找到該injectionToken依賴的供應商失敗。

我想解決這個問題的一個正確方法是模擬快餐欄組件,sandly我還沒有找到任何有效的方法。

任何幫助,將不勝感激。由於

+1

有ÿ你解決了這個問題嗎?有同樣的問題 – user990993

回答

0

我猜你的app.config看起來像這樣在Angular tutorial:

import { InjectionToken } from '@angular/core'; 

export interface IAppConfig { 
    smartTable: { 
    widthColumnNumber: string; 
    widthColumnPercentage: string; 
    }; 
} 

export const APP_DI_CONFIG: IAppConfig = { 
    smartTable: { 
    widthColumnNumber: '5rem', 
    widthColumnPercentage: '10rem', 
    }, 
}; 

export let APP_CONFIG = new InjectionToken<IAppConfig>('app.config'); 

描述是爲了增加對這樣的供應商,你應該NgModule添加提供程序是這樣的:

import { APP_CONFIG, APP_DI_CONFIG } from '../../app.config'; 

... 
... 

{ provide: APP_CONFIG, useValue: APP_DI_CONFIG }, 

而在你的單元測試,你可以以嘲笑的配置做到這一點:

import { APP_CONFIG } from '../../app.config'; 

... 
let mockConfig = {}; 
... 

{ provide: APP_CONFIG, useValue: mockConfig },