2017-04-25 178 views
3

我有時在單元測試中看到一個注入錯誤,看起來像下面那樣,並且我不知道我應該修復哪個依賴關係。我試圖玩與我在TestBed.configureTestingModule配置提供商,但沒有幫助。任何人都有想法,我可以繼續調查這個問題?Angular:如何在單元測試中調試注入錯誤

✖ should create 
    Chrome 57.0.2987 (Mac OS X 10.11.0) 
Error 
    at injectionError (webpack:///~/@angular/core/@angular/core.es5.js:1232:21 <- src/test.ts:1992:86) [angular] 
    at noProviderError (webpack:///~/@angular/core/@angular/core.es5.js:1270:0 <- src/test.ts:2030:12) [angular] 
    at ReflectiveInjector_.Array.concat.ReflectiveInjector_._throwOrNull (webpack:///~/@angular/core/@angular/core.es5.js:2772:0 <- src/test.ts:3532:19) [angular] 
    at ReflectiveInjector_.Array.concat.ReflectiveInjector_._getByKeyDefault (webpack:///~/@angular/core/@angular/core.es5.js:2811:0 <- src/test.ts:3571:25) [angular] 
    at ReflectiveInjector_.Array.concat.ReflectiveInjector_._getByKey (webpack:///~/@angular/core/@angular/core.es5.js:2743:0 <- src/test.ts:3503:25) [angular] 
    at ReflectiveInjector_.Array.concat.ReflectiveInjector_.get (webpack:///~/@angular/core/@angular/core.es5.js:2612:0 <- src/test.ts:3372:21) [angular] 
    at DynamicTestModuleInjector.Array.concat.NgModuleInjector.get (webpack:///~/@angular/core/@angular/core.es5.js:3577:0 <- src/test.ts:4337:52) [angular] 
    at resolveDep (webpack:///~/@angular/core/@angular/core.es5.js:10981:0 <- src/test.ts:11741:45) [angular] 
    at createClass (webpack:///~/@angular/core/@angular/core.es5.js:10849:0 <- src/test.ts:11609:32) [angular] 
    at createDirectiveInstance (webpack:///~/@angular/core/@angular/core.es5.js:10675:21 <- src/test.ts:11435:37) [angular] 
    at createViewNodes (webpack:///~/@angular/core/@angular/core.es5.js:12024:33 <- src/test.ts:12784:49) [angular] 
    at callViewAction (webpack:///~/@angular/core/@angular/core.es5.js:12394:0 <- src/test.ts:13154:13) [angular] 
    at execComponentViewsAction (webpack:///~/@angular/core/@angular/core.es5.js:12333:0 <- src/test.ts:13093:13) [angular] 
    at createViewNodes (webpack:///~/@angular/core/@angular/core.es5.js:12051:0 <- src/test.ts:12811:5) [angular] 

我使用:angular: 4.0.0 ng-cli: 1.0.0

回答

1

找到一個可行的方法。堆棧跟蹤顯示有一個resolveDep方法,這會導致錯誤:

at resolveDep (webpack:///~/@angular/core/@angular/core.es5.js:10982:0 <- src/test.ts:11742:45) [angular] 

所以我把一個破發點這種方法中:

debugger; 
return startView.root.ngModule.injector.get(depDef.token, notFoundValue); 

,並刷新噶瀏覽器頁面中的文檔中描述:https://angular.io/docs/ts/latest/testing/#!#test-debugging

我能看到什麼樣的依賴關係需要檢查devDep變量: enter image description here

+1

好找!現在我真的很想知道爲什麼地球上最重要的信息沒有在錯誤信息中提及...... 您可以從module.ngfactory.js中的行中獲得相同的信息: Object.defineProperty(DynamicTestModuleInjector.prototype ,'_SqliteProvider_67',{get:function(){ var self = this; if((self .__ SqliteProvider_67 == null)){(self .__ SqliteProvider_67 = new jit_SqliteProvider49(self.parent.get(jit_SQLite50))); } return self .__ SqliteProvider_67; }}); 我在Angular 4.0.2上。 –