2016-09-06 8 views
2

例はbellowですが、test-strは未定義です。 どのように角度2の約束からの価値を得るのですか?Test Promise <string>角度2単位テストでの値

describe('Test',() => { 
     it('case of string',() => { 
      let t: Promise<string> = deserializeSimpleField(...); 
      let str:string; 
      t.then(value=>str = value); 
      expect(str).toEqual('name'); 
     });}); 

答えて

3

非同期実行は伝染性があります。同期の実行に戻ることはできません。

describe('Test',() => { 
    it('case of string', inject([AsyncTestCompleter], (async: AsyncTestCompleter) => { 
     deserializeSimpleField(...) 
     .then(value => { 
      expect(value).toEqual('name'); 
      async.done(); 
     }); 
    }); 
}); 

私はhttps://github.com/angular/angular/blob/master/modules/@angular/forms/test/form_array_spec.ts

更新Iは角/テスト@使用しており、そこAsyncTestCompleterが欠落している

describe('Test',() => { 
    it('case of string', async(() => { 
     return deserializeSimpleField(...) 
     .then(value => { 
      expect(value).toEqual('name'); 
      async.done(); 
     }); 
    })); 
}); 
+0

親愛なる@Gunterでそれを見上げました?。存在する方法は@角度/テストでそれを行うのですか? – emanuel07

+0

実際、私は非同期テストを行う正しい方法と現在の方法が何であるか分かりません。私はチェンジログで何も見つけられませんでした。最近更新されたgithubリポジトリのテストを調べました。更新された回答をお試しください。 (追加された 'return'が必要なのかどうかはわかりません)。 –

+0

更新されたバージョンがもたらす: TypeError:AsyncTestZoneSpecはコンストラクタではありません at runInAsyncTestZone – emanuel07

2
I resolve question following way,(using fakeAsync,tick..) 

require('zone.js/dist/fake-async-test'); 
import {describe, it, expect, fakeAsync, tick} from '@angular/testing' 
describe('my first test',() => { 
    it('Promises fulfilled by tick',fakeAsync((): void => { 
     let promise:Promise<number> =Promise.resolve(11); 
     let x:number; 
     promise.then(v => { 
      x = v; 
     }); 
     tick(); 
     expect(x).toBe(11); 
    })); 
}); 
+0

親愛なる@Gunterは解決方法をご覧ください。 – emanuel07

+0

唯一の違いは「偽」のようですね。 (そして 'tick();') –

+0

うん。 tick() - fakeAsyncゾーンのタイマーの非同期時間をシミュレートします。 – emanuel07

関連する問題