2016-04-15 22 views
0

私は、拒否された約束事でエラーメッセージをチェックしようとしています。テストでメッセージ文字列を間違えてしまっても、それは引き続き通過します。拒否された約束とエラーメッセージを約束したchai-as-promedでどのようにテストしますか?

MyService.doSomething({ id: 12345 }).should.eventually.be.rejectedWith(TypeError, 'no attr foo defined2'); 



    svc.doSomething = function(thing){ 
    var def = $q.defer(); 

    if (!thing.foo) { 
     def.reject(new Error('no attr foo defined')); 
    } else { 
     def.resolve(thing); 
    } 

    return def.promise; 
    }; 

更新すると、テストが正しく機能していないようです。私はそれを返すタイムアウトした場合:

it.only('should error', function(){ 
    // todo this should fail but it just times out 
    return MyService.doSomething({ id: 12345 }).should.eventually.be.rejectedWith(TypeError, 'no attr foo defined2'); 
    }); 







    svc.doSomething = function(thing){ 
    var def = $q.defer(); 

    if (!thing.foo) { 
     def.reject(new Error('no attr foo defined')); 
    } else { 
     def.resolve(thing); 
    } 

    return def.promise; 
    }; 

はここでエラーです:

Error: timeout of 4000ms exceeded. Ensure the done() callback is being called in this test. 

答えて

0

あなたはあなたの呼び出しの前に最終的には、リターンを忘れています。!

return MyService.doSomething({ id: 12345 }).should.eventually.be.rejectedWith... 
+0

私はそれを試みました。文字列が 'no attr foo defined2'である場合、まだ渡されます。 – chovy

+0

そして呼び出し前に戻ります! –

+0

私は 'done()'が呼び出されていないと返すだけでタイムアウトします。 – chovy

関連する問題