2016-03-22 2 views
0

私はSinonとMochaを使っていくつかの有効期限をテストしています。私は数ヶ月前に同じコードを使いましたが、うまくいきましたが、v1.12.xとv1.17.xの間のどこかに何か変わってしまい、正しいパスを見つけることができません。Sinon useFakeTimers()はbefore/afterEachでタイムアウトを作成します

let sinon = require('sinon'); 
describe('USER & AUTHENTICATION ENDPOINTS', function(done) { 
    beforeEach(function() { 
     this.clock = sinon.useFakeTimers(new Date().getTime()); 
     return fixtures.load(data); 
    }); 
    afterEach(function() { 
     this.clock.restore(); 
     return fixtures.clear(data); 
    }); 

    context('POST /users', function() { ... } 
}); 
  • は、私はとnew Date().getTime()引数なしで試してみました。
  • 私は渡して、明示的にdone()を呼び出しました。
  • 私はフィクスチャロード/クリアプロセスを削除しようとしました。

最終的な結果は常に同じです:

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

は何かが私はマニュアルに気づいていないことを変わりましたか?私には見えない何らかのエラーがありますか?

どのような考えにも感謝します。ここ

UPDATE

だから、もう少し情報。これは明らかに私のコードと関係がありますが、私は迷っています。

すべての実際のテストにコメントすると、テストが実行され、緑色の「0通過」が表示されます。

私は、実際のテストを実行する場合

、だけでも、この1:

context('POST /users', function() { 
    it('should create a new user', function(done) { 
     done(); 
    }) 
}); 

私はすぐに戻ってタイムアウトです。私は何が欠けていますか?

答えて

2

Mystery solved。 SinonとKnex> 0.7.6のバージョンとの間に矛盾があるようです。

pool2は、動作がsetTimeoutに依存していると考えられます。 sinon.useFakeTimers(...)を使用すると、setTimeoutなどのいくつかの方法が、それを壊す同期バージョンで置き換えられます。次のように置き換えて修正できます:clock = sinon.useFakeTimers(Number(date), 'Date');

私のオリジナルコードは、Knex v0.7.6が最新のバージョンの世界で書かれています。コード自体が同じであっても、すべてが失敗したわけではありません。私は言及された修正を使用し、物事は上手く見える。

1

あなたは、2行目であなたのdescribeコールバックにdoneを渡している。

describe('USER & AUTHENTICATION ENDPOINTS', function(done) { 

モカはあなたがそれを呼び出すために...タイムアウトエラーを取り除くには、単にコールバックからdoneパラメータを削除し期待しています。

+0

これは問題の少なくとも一部ですが、問題のすべてではないようです。それを削除しても、私はまだ同じ問題を抱えています。 –

+0

私はsinon 1.17.3で自分のテストを実行しました。あなたのfixtures.load()とfixtures.clear()行をコメントアウトしました。私にとっては、テストはタイムアウトなしで緑色です。だから多分これらの行で奇妙なことが起こっている? – Nicole

+0

(そして、正直言って、最外部の記述に "done"パラメータでテストさえも緑色です...) – Nicole

関連する問題