2017-07-19 8 views
2

私はそれのコンストラクタ角度2+ Unitest提供するディレクティブは、オブジェクト

指令コードでそのコンストラクタでウィンドウオブジェクトをrecievesディレクティブのテストを書くしようとしている注入します私は、ディレクティブがテンプレートで使用されているテスト・コンポーネントを初期化しようとしているとき、私はここで、射出エラー

を受けていたテスト仕様ファイルです:

import {Component, ElementRef, DebugElement} from '@angular/core'; 
import {TestBed, async, ComponentFixture} from '@angular/core/testing'; 
import {FixToViewportDirective} from './fixToViewport.directive'; 
import {createInjector} from "@angular/core/src/view/refs"; 
import {By} from "@angular/platform-browser"; 


@Component({ 
    selector: 'app-test-fixtoviewport', 
    template:'<div appFixToViewport="isOpenFlag" ></div>' 
    }) 
class TestFixToViewPort {} 


describe('Directive: FixToViewportDirective',()=>{ 
    let component :TestFixToViewPort 
    let fixture : ComponentFixture<TestFixToViewPort>; 
    let inputEl: DebugElement; 
    const $window= Window; 

    beforeEach((()=>{ 

     TestBed.configureTestingModule({ 
      declarations: [ 
       TestFixToViewPort, 
       FixToViewportDirective 
      ]}); 

      fixture = TestBed.createComponent(TestFixToViewPort); 
      component= fixture.componentInstance; 
      inputEl= fixture.debugElement.query(By.css('div')); 
     })); 
    it('should have a defined component',() => { 
     expect(component).toBeDefined(); 
    }); 
    }) 

とエラートレース:

指令:FixToViewportDirective

× should have a defined component 
     Error 
      at injectionError (webpack:///~/@angular/core/@angular/core.es5.js:1232:0 <- src/test.ts:1511:86) [angular] 
      at noProviderError (webpack:///~/@angular/core/@angular/core.es5.js:1270:0 <- src/test.ts:1549:12) [angular] 
      at ReflectiveInjector_._throwOrNull (webpack:///~/@angular/core/@angular/core.es5.js:2771:0 <- src/test.ts:3050:19) [angular] 
      at ReflectiveInjector_._getByKeyDefault (webpack:///~/@angular/core/@angular/core.es5.js:2810:0 <- src/test.ts:3089:25) [angular] 

     Expected undefined to be defined. 
      at Object.<anonymous> (webpack:///src/app/shared/fixViewport/fixToViewportTester.component.spec.ts:42:7 <- src/test.ts:144444:27) [ProxyZone] 
      at ProxyZoneSpec.onInvoke (webpack:///~/zone.js/dist/proxy.js:80:0 <- src/test.ts:114788:39) [ProxyZone] 
      at Object.<anonymous> (webpack:///~/zone.js/dist/jasmine-patch.js:105:9 <- src/test.ts:114487:34) [<root>] 

Chrome 59.0.3071 (Windows 10 0.0.0) Directive: FixToViewportDirective should have a defined component FAILED 
     Error 
      at injectionError (webpack:///~/@angular/core/@angular/core.es5.js:1232:0 <- src/test.ts:1511:86) [angular] 
      at noProviderError (webpack:///~/@angular/core/@angular/core.es5.js:1270:0 <- src/test.ts:1549:12) [angular] 
      at ReflectiveInjector_._throwOrNull (webpack:///~/@angular/core/@angular/core.es5.js:2771:0 <- src/test.ts:3050:19) [angular] 
      at ReflectiveInjector_._getByKeyDefault (webpack:///~/@angular/core/@angular/core.es5.js:2810:0 <- src/test.ts:3089:25) [angular] 
      at ReflectiveInjector_._getByKey (webpack:///~/@angular/core/@angular/core.es5.js:2742:0 <- src/test.ts:3021:25) [angular] 
      at ReflectiveInjector_.get (webpack:///~/@angular/core/@angular/core.es5.js:2611:0 <- src/test.ts:2890:21) [angular] 
      at DynamicTestModuleInjector.NgModuleInjector.get (webpack:///~/@angular/core/@angular/core.es5.js:3579:0 <- src/test.ts:3858:52) [angular] 
      at resolveDep (webpack:///~/@angular/core/@angular/core.es5.js:11040:0 <- src/test.ts:11319:45) [angular] 
      at createClass (webpack:///~/@angular/core/@angular/core.es5.js:10896:0 <- src/test.ts:11175:91) [angular] 
      at createDirectiveInstance (webpack:///~/@angular/core/@angular/core.es5.js:10724:0 <- src/test.ts:11003:37) [angular] 
      at createViewNodes (webpack:///~/@angular/core/@angular/core.es5.js:12087:29 <- src/test.ts:12366:49) [angular] 
      at callViewAction (webpack:///~/@angular/core/@angular/core.es5.js:12531:0 <- src/test.ts:12810:13) [angular] 
      at execComponentViewsAction (webpack:///~/@angular/core/@angular/core.es5.js:12440:0 <- src/test.ts:12719:13) [angular] 
      at createViewNodes (webpack:///~/@angular/core/@angular/core.es5.js:12114:0 <- src/test.ts:12393:5) [angular] 
     Expected undefined to be defined. 
      at Object.<anonymous> (webpack:///src/app/shared/fixViewport/fixToViewportTester.component.spec.ts:42:7 <- src/test.ts:144444:27) [ProxyZone] 
      at ProxyZoneSpec.onInvoke (webpack:///~/zone.js/dist/proxy.js:80:0 <- src/test.ts:114788:39) [ProxyZone] 
      at Object.<anonymous> (webpack:///~/zone.js/dist/jasmine-patch.js:105:9 <- src/test.ts:114487:34) [<root>] 

Chrome 59.0.3071 (Windows 10 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (1.053 secs/0.076 secs) 

私はディレクティブにそれがために検索ウィンドウオブジェクトを挿入する方法は?テストモジュールにElementRefを追加

+0

この友人を見てください:https://stackoverflow.com/questions/36432407/how-to-unit-test-a-directive-in -angular-2 – SrAxi

+0

私はこの説明を理解しており、実際にそれに従って、この注入問題に遭遇しました。私は解決できません。この説明は、指示文にコンストラクタが挿入されている状況を参照していません。 –

答えて

0

試してみてください。

TestBed.configureTestingModule({ 
      declarations: [ 
       TestFixToViewPort, 
       FixToViewportDirective 
      ], 
      imports: [ ElementRef ] 
}); 
+0

あなたが示唆したようにElementRefをインポートしようとしましたが、テストを実行すると、次のエラーが発生しました: ディレクティブ:FixToViewportDirective ×定義済みのコンポーネントがあります エラー:予期しない値 'ElementRef'がモジュール 'DynamicTestModule'によってインポートされました。 @NgModuleアノテーションを追加してください。 at syntaxError .... –

関連する問題