2017-11-16 7 views
0

を編集します。これは、ここで説明するのと同じ問題です:https://github.com/facebook/jest/issues/2980。エラーのためdone()が呼び出されないため、jamsinのタイムアウトに達します。それで大丈夫です。しかし、大丈夫ではないことは、ジャスミン/嫌がらせが起こったエラーを報告すべきだということです。jest:Promiseでエラーメッセージが失われる

注:ソースコードの例は hereです。これは、エラーを含む

// file: foo.js 

function foo(done) { 
    const p = new Promise((resolve, reject) => { 
     setTimeout(() => { 
      //const xxx = 2; 
      resolve(xxx); 
     }, 100); 
    }); 
    p.then(data => { 
     console.log(data); 
     done() 
    }) 
} 

exports.foo = foo; 

xxx変数が定義されていないので、エラーが しなければならない

Promiseを作成し、約束が解決されたとき doneコールバックを呼び出し、以下の機能を、考えてみましょう育った。

私はインポートこの機能を実行すると、スクリプトでそれを実行した場合:

// file: index.js 

const foo = require('./foo').foo; 

foo(() => {}); 

node v8.6.0でスクリプトを実行します。

node index.js 

私が予想されるエラー(ReferenceError: xxx is not defined)を取得

/home/dfroger/repo/dfroger/issue/jest-promise-error/foo.js:5 
      resolve(xxx); 
        ^

ReferenceError: xxx is not defined 
    at Timeout.setTimeout [as _onTimeout] (/home/dfroger/repo/dfroger/issue/jest-promise-error/foo.js:5:21) 
    at ontimeout (timers.js:469:11) 
    at tryOnTimeout (timers.js:304:5) 
    at Timer.listOnTimeout (timers.js:264:5) 

今はの単体テストを書く10:私はこれ以上xxx being not definedに関するエラーメッセージを取得

./node_modules/.bin/jest 

を::

// file: foo.test.js 

const foo = require('./foo').foo 

describe('async',() => { 
    it('run foo', done => { 
     foo(done); 
    }); 
}); 

そしてjest v21.2.1でそれを実行し

async 
    ✕ run foo (5004ms) 

    ● async › run foo 

    Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. 

     at node_modules/jest-jasmine2/build/queue_runner.js:64:21 
     at ontimeout (timers.js:469:11) 
     at tryOnTimeout (timers.js:304:5) 
     at Timer.listOnTimeout (timers.js:264:5) 

Test Suites: 1 failed, 1 total 
Tests:  1 failed, 1 total 
Snapshots: 0 total 
Time:  5.574s, estimated 6s 
Ran all test suites. 

は私がjestを使用欠場しましたか?それはjestバグですか? jest が常にエラーメッセージを正しく報告するようにするにはどうすればよいですか?

答えて

0

あなたの約束にキャッチブロックを追加しないでください。私はそれをすべて試すことはできませんが、私はこれがあなたの問題だと信じています。

//ファイル:

function foo(done) { 
    const p = new Promise((resolve, reject) => { 
     setTimeout(() => { 
      //const xxx = 2; 
      resolve(xxx); 
     }, 100); 
    }); 
    p.then(data => { 
     console.log(data); 
     done() 
    }) 
    .catch(err => { 
     console.log(`Following error occured : ${err}`); 
    });  
} 

exports.foo = foo; 
foo.jsは
関連する問題