回答:
どうぞ:http : //mochajs.org/#test-level
it('accesses the network', function(done){
this.timeout(500);
[Put network code here, with done() in the callback]
})
アロー関数の場合、次のように使用します。
it('accesses the network', (done) => {
[Put network code here, with done() in the callback]
}).timeout(500);
before(function(done){this.timeout(5 * 1000);...});
.timeout(500)
末尾に追加it(...).timeout(500)
es6矢印関数を使用したい場合.timeout(ms)
は、it
定義の最後にa を追加できます。
it('should not timeout', (done) => {
doLongThing().then(() => {
done();
});
}).timeout(5000);
少なくともこれはTypescriptで機能します。
.timeout
モカのためのDefinitelyTypedのタイピングには含まれていません。i.imgur.com/jQbWCn1.png -使用this.timeout(2000)
またはthis.slow(500)
エラーなしで通常の古い機能の作品やコンパイルをして
it
、に対しては機能しませんdescribe
。
describe()
またはのためにこれを行う方法はありcontext()
ますか?
.timeout
がDefinitelyTypedのMochaタイピングに含まれるようになりましたMocha.IRunnable
。ただし、これらのテストを実行するためにWebstorm IDEを使用している場合、注意点:何らかの理由で、WebStormのMocha統合プラグインは、.timeout()
追加されたMochaテストをまだ認識しません(つまり、横に[実行]ボタンが表示されません)。したがって、this.timeout()
代わりに矢印関数を使用しないようにすることを推奨します。
(今日これに遭遇したので)
ES2015ファットアロー構文を使用するときは注意してください。
これは失敗します:
it('accesses the network', done => {
this.timeout(500); // will not work
// *this* binding refers to parent function scope in fat arrow functions!
// i.e. the *this* object of the describe function
done();
});
編集:それが失敗する理由:
@atothがコメントで言及しているように、ファットアロー関数には独自のthisバインディングがありません。したがって、it 関数がコールバックのthisにバインドしてタイムアウト関数を提供することはできません。
結論:タイムアウトを増やす必要がある関数には、矢印関数を使用しないでください。
this
矢印関数には拘束力はありません。同じように、ある種の、異なるだけの機能を示唆するものではありません。それらにはレキシカルスコープしかありません。存在しないこれをバインドすることはできません。なぜだこと.bind
、.call
などのことでは動作しません。
this
。
また、別のアプローチを採用し、ネットワークリソースへの呼び出しをスタブまたはモックオブジェクトに置き換えることも検討してください。Sinonを使用すると、アプリをネットワークサービスから切り離して、開発作業に集中できます。
のテストナビゲーションExpress
:
const request = require('supertest');
const server = require('../bin/www');
describe('navegation', () => {
it('login page', function(done) {
this.timeout(4000);
const timeOut = setTimeout(done, 3500);
request(server)
.get('/login')
.expect(200)
.then(res => {
res.text.should.include('Login');
clearTimeout(timeOut);
done();
})
.catch(err => {
console.log(this.test.fullTitle(), err);
clearTimeout(timeOut);
done(err);
});
});
});
この例では、テスト時間は4000(4秒)です。
注:テストの時間内に呼び出されるsetTimeout(done, 3500)
よりもマイナーですdone
が、clearTimeout(timeOut)
これらすべての時間を使用するよりは避けます。
これは私のために働いた!before()で動作するものを見つけることができませんでした
describe("When in a long running test", () => {
it("Should not time out with 2000ms", async () => {
let service = new SomeService();
let result = await service.callToLongRunningProcess();
expect(result).to.be.true;
}).timeout(10000); // Custom Timeout
});