2017-07-17 5 views
1

このテストでどこが間違っているのか分かりません。Jasmine、AngularJS:ユニットテストでタイムアウト後に値を返す

サービスコード:

self.clearMessage = function(interval) { 
    if (!interval) 
    interval = 2000; 

    return $timeout(function() { 
    return ''; 
    }, interval); 
}; 

仕様:

it('clears message', function() { 
    var result = self.clearMessage(); 

    $timeout.flush(); 

    expect(result).toBe(''); 
}); 

また、私はノー成功をテストしてダイジェスト・サイクルをトリガーしようとしました。私は一般的にタイムアウトブロック内に外部変数を設定しているので、これまでにこの問題に遭遇することはありません。これは単体テストでうまく動作します。このシナリオでは

、私は次のエラーが表示され、タイムアウト内部だけのリターンがあります:

Expected Promise({ $$state: Object({ status: 1, value: '' }), $$timeoutId: 1 }) to be ''.

EDIT/ANSWER

it('clears message', function() { 
 
    self.clearMessage().then(function(response) { 
 
    expect(response).toBe(''); 
 
    }) 
 

 
    $timeout.flush(); 
 
});

答えて

1

は、 AngularJSの電話番号$timeoutサービスは、お客様にプロミスを返送しています。この約束は... "タイムアウトに達すると解決されます。約束事はfn関数の戻り値で解決されます。 https://docs.angularjs.org/api/ng/service/$timeout

あなたのスペックでこのような何かをする必要があります:私は上記の予想通りそれは関数がで使用されている方法ですと、それは、働いていたいのに、仕事をする

var result = self.clearMessage(); 
result.then(function(value) { 
    expect(value).toBe(''); 
}); 

$timeout.flush(); 

JSFiddle

+0

製造。私は物事を正しくテストしていないと感じています。 とにかく、ありがとう –

関連する問題