4

sinon、jasmine、および $q を使用してメソッドをスタブしようとしています。そのメソッドが私の偽のデータを返すことを望みます。

問題は、定義されたthenステートメントが呼び出されないことであり、その理由がわかりません。これはすでに簡略化されたバージョンですが、まだ機能していません:

  • スタブは呼び出されます
  • コンソールログSteven Stub is calledが呼び出されます
  • thenコールバックは呼び出されません
  • エラー メッセージなし

これが私のコードです

var p = {steven: function() {console.log('original steven');}},
    pStub = sinon.stub(p, 'steven', function(){
      console.log('Steven Stub is called');
      var defer = $q.defer();
      defer.resolve({item: 5});
      return defer.promise;
});

var promise = p.steven();

promise.then(
  function(data){console.log('Peter?');},
  function(data) {console.log('ERROR?');},
  function(data) {console.log('progress?');});

何か案が?

4

1 に答える 1

9

promise を解決するには、ダイジェストを呼び出す必要があります。Angular 2.0 ではこれは修正される予定です (Angular 1.2 は Angular 1.1 よりもわずかに優れています)。

$rootScope.$digest()

約束を解決させるため。これは、promise が evalAsync を介して機能するためです。ダイジェスト サイクルが $q promises ライフサイクルとどのように相互作用するかについて詳しくは、この質問を参照してください。

于 2014-05-12T12:06:02.693 に答える