![](/img/trans.png)
[英]Injecting data before creating mock component with TestBed - unit testing in angular 4
[英]Angular/NgRx Unit testing can't create TestBed
在開發需要和 NgRx 存儲的組件時,測試套件失敗,我收到一條消息,指出...
“無法解析 NavComponent 的所有參數:(?)。”
● AppComponent › should create the app
Can't resolve all parameters for NavComponent: (?).
at syntaxError (../packages/compiler/src/util.ts:100:17)
at CompileMetadataResolver._getDependenciesMetadata (../packages/compiler/src/metadata_resolver.ts:957:27)
at CompileMetadataResolver._getTypeMetadata (../packages/compiler/src/metadata_resolver.ts:836:20)
at CompileMetadataResolver.getNonNormalizedDirectiveMetadata (../packages/compiler/src/metadata_resolver.ts:377:18)
at CompileMetadataResolver.loadDirectiveMetadata (../packages/compiler/src/metadata_resolver.ts:224:11)
at ../packages/compiler/src/jit/compiler.ts:135:36
at Array.forEach (<anonymous>)
at ../packages/compiler/src/jit/compiler.ts:133:65
at Array.forEach (<anonymous>)
at JitCompiler._loadModules (../packages/compiler/src/jit/compiler.ts:130:71)
at JitCompiler._compileModuleAndAllComponents (../packages/compiler/src/jit/compiler.ts:115:32)
at JitCompiler.compileModuleAndAllComponentsAsync (../packages/compiler/src/jit/compiler.ts:69:33)
at CompilerImpl.compileModuleAndAllComponentsAsync (../packages/platform-browser-dynamic/src/compiler_factory.ts:69:27)
at TestingCompilerImpl.compileModuleAndAllComponentsAsync (../../packages/platform-browser-dynamic/testing/src/compiler_factory.ts:57:27)
at TestBedViewEngine.compileComponents (../../packages/core/testing/src/test_bed.ts:362:27)
at Function.TestBedViewEngine.compileComponents (../../packages/core/testing/src/test_bed.ts:160:66)
at src/app/app.component.spec.ts:32:8
at ZoneDelegate.Object.<anonymous>.ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:391:26)
at ProxyZoneSpec.Object.<anonymous>.ProxyZoneSpec.onInvoke (node_modules/zone.js/dist/proxy.js:129:39)
at ZoneDelegate.Object.<anonymous>.ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:390:52)
at Zone.Object.<anonymous>.Zone.run (node_modules/zone.js/dist/zone.js:150:43)
我的測試床配置
describe('AppComponent', () => {
let router: Router;
let location: Location;
let store: MockStore<ApplicationState>;
const initialState: ApplicationState = {
root: {
user: null,
tabs: null
}
};
beforeEach(() => {
TestBed.configureTestingModule({
imports: [RouterTestingModule.withRoutes(routes), MaterialsModule],
declarations: [AppComponent, NavComponent],
providers: [provideMockStore({ initialState })]
}).compileComponents();
router = TestBed.get(Router);
location = TestBed.get(Location);
store = TestBed.get<Store<ApplicationState>>(Store);
router.initialNavigation();
});
組件
@Component({
selector: 'af3-nav',
templateUrl: './nav.component.html',
styleUrls: ['./nav.component.css']
})
export class NavComponent implements OnInit {
tabs$: Observable<NavTab[]>;
constructor(private store: Store<fromStore.ApplicationState>) {}
ngOnInit() {
// this.tabs$ = this.store.pipe(select(fromStore.selectTabsForUserState));
}
}
我也嘗試過導入 StoreModule,但根據ngrx.io ,這不是必需的,因為provideMockStore()
設置了配置減速器所需的所有提供程序。
錯誤和堆棧跟蹤不是很有幫助。
提前感謝您的幫助。
更新:事實證明,測試台不能注入任何引用的服務。 我創建了一個測試服務並嘗試運行測試,但在運行測試時收到了相同的錯誤。
更新:NGRX 絕對不是問題。 為了添加更多上下文,我一直在嘗試追蹤這個問題。 目前沒有提供者可以解決。 我用 Jest 替換 Jasmine ,看起來 Jest 可能是問題所在。
添加emitDecoratorMetadata: true
到tsconfig.spec.json
是我的解決方案。
參考: https://github.com/thymikee/jest-preset-angular/issues/288
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.