2016-08-12 12 views
1

私は自分のアプリに注入した別のライブラリで約束をテストしようとしています。JasmineでPromiseテストを実行する方法

function myFunc(input) { 
 
     return new Promise(function(resolve, reject) { 
 
      ··· 
 
      resolve(value); // success 
 
      ··· 
 
      reject(error); // failure 
 
     }); 
 
    };

これは約束を返す私の関数です。

私は真剣に私のログにこの

describe('Service: myService', function() { 
 
    var $log; 
 

 
beforeEach(inject(function (_$log_) { 
 
    $log = _$log_; 
 
})); 
 

 
it('should get results', function() { 
 
    $log.log("start test"); 
 

 
    var self = this; 
 
    myFunc(input).then(function(response) { 
 
      $log.log("success"); 
 
      expect(response).toBe("response"); 
 
      done(); 
 
    }).catch(function(error) { 
 
      $log.log("fail"); 
 
      self.fail(error); 
 
      done(); 
 
    }); 
 
    $log.log("end test"); 
 
}); 
 
});

私のテストパス(期待できない。)と唯一のことのようにジャスミンにテストを実行するのが大好きだされた[テストを開始]と約束が完全に無視されているかのように。 約束事のために$ qを使っていないので、ほとんどのジャスミンの先端は役立たないようです。

「その時」に入る方法に関するアイデアはありますか?

おかげ

答えて

0

私はここで間違っているかもしれないが、あなたはここに非同期プロセスをテストしようとしているので、これが最も可能性が高いです。だから本質的に何が起きているのかは、関数を呼び出すことですが、テストが成功し、テストが成功する前にテストが実行され、終了します。

これを回避する1つの方法(これはハックに似ていますが、これを行うより良い方法があると確信していますが、見つけたらこの投稿を編集します)テストの終わりに:

describe("baseline test",function(){ 
    it("baseline",function(done){ 
     setTimeout(function(){ 
      expect(1).toEqual(1); 
      done(); 
     },1000);  
    }); 
}); 

は、基本的にこのスニペットが何をするかだけでコールバックするすべての非同期呼び出しのための1秒を待ちタイムアウトを設定されています。 1秒で十分でない場合は、常に1000を増やすことができます(ミリ秒単位)。これがうまくいかない場合は、約束が戻るまで完了しない別のテストスイートを追加してみてください。

+0

ありがとうございました。私はこれを試しましたが、現在タイムアウトエラーが発生しています。私はスレッドが何とか失われると思う。まだ考え出している。 – Jade

関連する問題