0

私は非同期$リソースサービスをAngularでテストしようとしています。最初に、$リソースを嘲笑したくないことに注意してください。実際に結果を得てテストしたいと思っています。

基本的に私のgetCountriesメソッドは、Angularの$リソースを使って国の配列を返します。私のスペックで

方法

getCountries(): any { 
     var countries = this.$resource(
      this.apiEndpoint.baseUrl, 
      { 
       'get': { 
        method: 'GET', isArray: false 
       } 
      }); 
     return countries; 
} 

私はジャスミンの完了()メソッドを実行する場所とのトラブルを抱えています。コードのコメントを読んでください。

スペック

describe(module',(): void => { 
    var one; 
    var SelfRegistrationResourceBuilder; 

    beforeEach((): void => { 
     angular.mock.module(
      'BuilderModule', 
      'ngResource' 
     ); 

     inject(
      ['Builder', (_SelfRegistrationResourceBuilder _: ISelfRegistrationResourceBuilder): void => { 
       SelfRegistrationResourceBuilder = _SelfRegistrationResourceBuilder_; 
      }]); 
    }); 


    describe('getCountries',(): void => { 

     beforeEach((done) => { //done is a parameter in beforeEach 
      SelfRegistrationResourceBuilder.getCountries().get(
       (value: any) => { 
        console.log("no error"); 
        one = "aValue"; 
        done(); //Do I have to call done() here 
       }, (error: any) => { 
        console.log("error"); 
        one = "aValue"; 
        //done(); What about here 
       }) 
      //done(); ..or here 
     }); 

     it("should...", (done) => { 
      expect(one).toBe("aValue"); 
      //done(); and here? 
     }); 
    }); 
}); 

だから私の問題は、私は自分のコードを実行したとき、私はどちらかのエラーがこの問題のタイトルに記載された取得または私が行っている(で遊んであればということのようです)メソッドIコールすると、 "one"という名前の変数は定義されていません。したがって、成功とエラーのコールバックが呼び出されなかったことを意味します。また、console.log()がコンソールに出力しないので、成功とエラーのコールバックが呼び出されないことも証明できます。

最後にブラウザの開発者ツールのネットワークセクションをチェックすると、サーバーへのリクエストが表示されません。誰かが私を助けようとしていてもらえますか?done()の呼び出しを除いて、私が考えているものはほとんどあります。

おかげ

答えて

0

doneは、非同期テストのためです。非同期テストは非同期操作の後それを呼び出すためにあなたがテスト非同期done例えば:

// No done needed 
    it("should...",() => { 
     expect(one).toBe("aValue"); 
    }); 

を使用していないされていない場合完了です。だから、:

beforeEach((done) => { //done is a parameter in beforeEach 
     SelfRegistrationResourceBuilder.getCountries().get(
      (value: any) => { 
       console.log("no error"); 
       one = "aValue"; 
       done(); // Yes call done 
      }, (error: any) => { 
       console.log("error"); 
       one = "aValue"; 
       // do not call done. You most likely want to throw to show this is an error case. 
      }) 
    }); 
+0

おかげであなたの助けが、それでも私に同じエラーを与え、私の「1」の変数はまだ – Archmede

+0

定義されていませんが、これはすべて私のコールバックは、[この](HTTP読ん – Archmede

+0

と呼ばれることはありません飽きないために発生していることをやって: //stackoverflow.com/questions/30346214/run-angularjs-resource-tests-without-mocking-responses)これは不可能かもしれないと私に伝えます – Archmede

関連する問題