Mocha: 2000ms의 μ‹œκ°„ μ΄ˆκ³Όκ°€ μ΄ˆκ³Όλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이 ν…ŒμŠ€νŠΈμ—μ„œ done() 콜백이 호좜되고 μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

에 λ§Œλ“  2015λ…„ 12μ›” 26일  Β·  19μ½”λ©˜νŠΈ  Β·  좜처: mochajs/mocha

전체 ν…ŒμŠ€νŠΈ λͺ¨μŒμ„ μ‹€ν–‰ν•  λ•Œ λ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

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

StackOverflow http://stackoverflow.com/questions/16607039/in-mocha-testing-while-calling-asynchronous-function-how-to-avoid-the-timeout-er# 및 μ—¬κΈ° https: //github.com/mochajs/mocha/pull/278

κ·ΈλŸ¬λ‚˜ HTTP 및 약속을 μ²˜λ¦¬ν•˜λŠ” ν…ŒμŠ€νŠΈμ—μ„œ λͺ¨λ“  ν•­λͺ©μ„ μ‚­μ œν•œ 후에도 λ¬Έμ œλŠ” μ—¬μ „νžˆ μ§€μ†λ©λ‹ˆλ‹€. μ§€κΈˆ 가지고 μžˆλŠ” 것은 ν…œν”Œλ¦Ώ 데이터, μ§€μ‹œλ¬Έ 및 컨트둀러 λ‘œμ§μ„ ν™•μΈν•˜λŠ” 것 μ™Έμ—λŠ” λ³„λ‘œ ν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” Angular μ§€μ‹œλ¬Έκ³Ό 컨트둀러 μ‚¬μ–‘λΏμž…λ‹ˆλ‹€.

μ™œ 이것이 μ—¬μ „νžˆ λ°œμƒν•˜λŠ”μ§€ 그리고 λ¬Έμ œκ°€ 무엇인지 μ •ν™•νžˆ μ•Œ 수 μžˆλŠ” 더 쒋은 방법이 μžˆλŠ”μ§€ μ•„λŠ” μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ? 감사 ν•΄μš”!

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

슀크립트 μ•„λž˜μ— package.json을 μΆ”κ°€ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

그럼 κ·Έλƒ₯ μ‹€ν–‰ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€

      npm test

λͺ¨λ“  19 λŒ“κΈ€

@gumatias λŠ” ν…ŒμŠ€νŠΈλ₯Ό μ„€μ •ν•˜λŠ” 데 훨씬 더 λ§Žμ€ 도움이 ν•„μš”ν•©λ‹ˆλ‹€.

ν”Όλ“œλ°±μ„ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€ @boneskul !

ν˜„μž¬ μ•½ 700개 μ΄μƒμ˜ 사양이 있으며 λͺ¨λ‘ 독점 μ½”λ“œμž…λ‹ˆλ‹€. 두 개의 μœ μ‚¬ν•œ μƒ˜ν”Œ 쀑 ν•˜λ‚˜λ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 도움이 λ κΉŒμš”?

μ•„λž˜λŠ” ν˜„μž¬ package.json에 μžˆλŠ” λ‚΄μš©μž…λ‹ˆλ‹€. mocha 및 karma-mocha와 같은 라이브러리λ₯Ό μ—…κ·Έλ ˆμ΄λ“œν•΄λ„ 도움이 λ˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

"devDependencies": {
  "karma": "~0.12.30",
  "karma-chai-jquery": "~1.0.0",
  "karma-chrome-launcher": "~0.1",
  "karma-coffee-preprocessor": "~0.1.3",
  "karma-firefox-launcher": "~0.1",
  "karma-jquery": "~0.1.0",
  "karma-mocha": "0.2.0",
  "karma-sinon-chai": "~0.1.1",
  "karma-spec-reporter": "~0.0.10",
  "mocha": "^2.2.5"
}

λ‹€μŒμ€ μ‹œκ°„ μ΄ˆκ³Όκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” μƒνƒœμ— λ„λ‹¬ν•˜λ €λŠ” μ‹œλ„ 쀑 μΌλΆ€μž…λ‹ˆλ‹€(μ„±κ³΅ν•˜μ§€ μ•ŠμŒ).

1. ν…ŒμŠ€νŠΈμ—μ„œ 각 ν”„λΌλ―ΈμŠ€ 및 비동기 호좜 λ‚΄ 및 이후에 done() 호좜

2. 비동기 호좜, 약속, httpBackend 및 μ‹œκ°„ 초과λ₯Ό μ²˜λ¦¬ν•˜λŠ” λͺ¨λ“  사양을 μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€(κ²½μš°μ— 따라).

3. package.json λŒ€λΆ€λΆ„μ˜ 라이브러리λ₯Ό μ—…κ·Έλ ˆμ΄λ“œν–ˆμŠ΅λ‹ˆλ‹€.

"devDependencies": {
  "karma": "~0.12.30",
  "karma-chai-jquery": "1.0.0",
  "karma-chrome-launcher": "0.2.2",
  "karma-coffee-preprocessor": "0.3.0",
  "karma-firefox-launcher": "~0.1",
  "karma-jquery": "0.1.0",
  "karma-mocha": "0.2.1",
  "karma-sinon-chai": "1.1.0",
  "karma-spec-reporter": "0.0.23",
  "mocha": "2.3.4"
}

4. μΉ΄λ₯΄λ§ˆ 사양 리포터가 λŠλ¦¬λ‹€κ³  λΆˆν‰ν•˜λ˜ 사양을 μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€.
예: Chrome 39.0.2171 (Mac OS X 10.11.2) SLOW 2.457 secs: My Spec Name "before each" hook for "should display " Add My Spec" when doing something"

λ‹€λ₯Έ μƒˆλ‘œμš΄ 사양이 λŠλ¦¬λ‹€κ³  λΆˆν‰ν•˜λŠ” κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¬μŠ΅λ‹ˆλ‹€. 이둜 인해 κ·Όλ³Έ 원인을 μ‹€μ œλ‘œ 찾지 μ•Šκ³  사양이 μ‚­μ œλ  수 μžˆμŠ΅λ‹ˆλ‹€.

이 문제λ₯Ό λ‹«μŠ΅λ‹ˆλ‹€. https://github.com/mochajs/mocha/issues/2030에 μ„€λͺ…λœ λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 문제둜 λ°ν˜€μ‘ŒμŠ΅λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈλ³„ μ‹œκ°„ 초과λ₯Ό μ μš©ν•˜κ±°λ‚˜ this.timeout(0)을 μ‚¬μš©ν•˜μ—¬ μ‹œκ°„ 초과λ₯Ό λͺ¨λ‘ λΉ„ν™œμ„±ν™”ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

 it('should take less than 500ms', function(done){
  this.timeout(500);
  setTimeout(done, 300);
});

좜처: https://mochajs.org/#timeouts

당신이 엠버λ₯Ό μ‚¬μš©ν•˜λŠ” 경우, Ember.runμ—μ„œ 호좜 비동기 포μž₯을 μ‹œλ„ => 이 읽기

λ‚˜λŠ” 같은 λ¬Έμ œκ°€ μžˆμ—ˆκ³  Ember.run => μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ ν™”μ‚΄ν‘œλŠ” λš±λš±ν•œ ν™”μ‚΄ν‘œμ—¬μ•Ό ν•œλ‹€λŠ” 것을 κΈ°μ–΅ν•˜μ‹­μ‹œμ˜€. (=> λŒ€μ‹  ->λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•œ 번 μ‹€μˆ˜λ₯Ό μ €μ§ˆλ €μŠ΅λ‹ˆλ‹€) 그것은 μžλ°”μŠ€ν¬λ¦½νŠΈ λ²”μœ„ λ•Œλ¬Έμž…λ‹ˆλ‹€. 관심이 μžˆλ‹€λ©΄ μ½μ–΄λ³΄μ‹­μ‹œμ˜€.

μŠ€νƒμ˜€λ²„ν”Œλ‘œ 링크

λ°›κ³ μžˆλ‹€
였λ₯˜: 2000ms의 μ‹œκ°„ μ΄ˆκ³Όκ°€ μ΄ˆκ³Όλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 비동기 ν…ŒμŠ€νŠΈ 및 ν›„ν¬μ˜ 경우 "done()"이 ν˜ΈμΆœλ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. Promiseλ₯Ό λ°˜ν™˜ν•˜λŠ” 경우 ν•΄κ²°λ˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.
이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?
λ‚΄ μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

describe("Test Search", function() {
    it("Test Post Request", function(done) {
            chai.request(postReqURL)
            .post(postReqURL)
            .send(postReqObject)
            .end(function (err, res) {
                if (err) done(err);
                expect(res.status).to.equal(200);
                done()
            })
       });
});

@vishnu2prasadh λ‹˜ , HTTP APIκ°€ μ‘λ‹΅ν•˜λŠ” 데 걸릴 κ²ƒμœΌλ‘œ μ˜ˆμƒλ˜λŠ” 것보닀 더 길게 μ‹œκ°„ 초과λ₯Ό 늘리렀고 μ‹œλ„ν•˜μ…¨μŠ΅λ‹ˆκΉŒ? done 의 ν…ŒμŠ€νŠΈ μ‚¬μš©μ΄ μ˜¬λ°”λ₯Έ 것 κ°™μŠ΅λ‹ˆλ‹€.

@ScottFreeCode κ°μ‚¬ν•©λ‹ˆλ‹€. this.timeout(10000)을 μΆ”κ°€ν•˜μ—¬ 였λ₯˜κ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 내뢀에

it("Test Post Request", function(done) {
     this.timeout(10000);
});

슀크립트 μ•„λž˜μ— package.json을 μΆ”κ°€ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

그럼 κ·Έλƒ₯ μ‹€ν–‰ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€

      npm test

@elvinaze beforeEach λΈ”λ‘μ—μ„œ μ‹œκ°„ 초과 μ œν•œμ„ λŠ˜λ¦¬λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

슀크립트 μ•„λž˜μ— package.json을 μΆ”κ°€ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

그럼 κ·Έλƒ₯ μ‹€ν–‰ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€

      npm test

μ§€κΈˆκΉŒμ§€ κ°€μž₯ μœ μš©ν•œ λ‹΅λ³€ πŸ‘

슀크립트 μ•„λž˜μ— package.json을 μΆ”κ°€ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

그럼 κ·Έλƒ₯ μ‹€ν–‰ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€

      npm test

μ—¬μ „νžˆ λ‚˜μ—κ²Œ μ™œ .Error: Timeout of 10000msκ°€ μ΄ˆκ³Όλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 비동기 ν…ŒμŠ€νŠΈ 및 ν›„ν¬μ˜ 경우 "done()"이 ν˜ΈμΆœλ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. Promiseλ₯Ό λ°˜ν™˜ν•˜λŠ” 경우 ν•΄κ²°λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

it('μ‚¬μš©μž λͺ¨λ“ˆμ— μ•‘μ„ΈμŠ€ν•΄μ•Ό 함', function(done){
any_asynchfunction ().then(ν•¨μˆ˜(체크){
λ…Έλ ₯ν•˜λ‹€{
assert.strictEqual(check,true,'κ΄€λ¦¬μž μ‚¬μš©μžλŠ” μ‚¬μš©μž λͺ¨λ“ˆμ— μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€');
μ™„λ£Œ();
}캐치(였λ₯˜){
μ™„λ£Œ(였λ₯˜);
}
});
});

var any_asynchfunction = ν•¨μˆ˜(){
var 지연 = q.defer();
// λ‹€μŒκ³Ό 같은 비동기 ν•¨μˆ˜ 호좜: API 호좜(http://api.domain.com)
deferred.resolve(res);
deferred.promiseλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
}

콜백과 약속을 μ‚¬μš©ν•˜μ—¬ Mocha둜 비동기 μ½”λ“œ ν…ŒμŠ€νŠΈ

@ashish101184 , κ΄€λ ¨ μ—†λŠ” 마감 λ¬Έμ œμ— λŒ“κΈ€μ„ μΆ”κ°€ν•˜μ§€ λ§ˆμ„Έμš”!

κ·€ν•˜μ˜ λ¬Έμ œλŠ” μ„€λͺ…μ„œ 에 μ„€λͺ…λ˜μ–΄

it('should access user module', function() {
  return any_asynchfunction()
    .then(function(check) {
      assert.strictEqual(check, true, 'admin user should have access to user module');
    });
});

ν…ŒμŠ€νŠΈλ³„ μ‹œκ°„ 초과λ₯Ό μ μš©ν•˜κ±°λ‚˜ this.timeout(0)을 μ‚¬μš©ν•˜μ—¬ μ‹œκ°„ 초과λ₯Ό λͺ¨λ‘ λΉ„ν™œμ„±ν™”ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

 it('should take less than 500ms', function(done){
  this.timeout(500);
  setTimeout(done, 300);
});

좜처: https://mochajs.org/#timeouts
HelloλŠ” κ·€ν•˜μ˜ 지침에 따라 '60000ms 초과 μ‹œκ°„ 초과' 였λ₯˜μ— μ§λ©΄ν•œ botium directline3을 μ„€μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€. 이 행을 μΆ”κ°€ν•΄μ•Ό ν•˜λŠ” 파일

κ°œλ³„ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ μ„€μ •ν•˜κ±°λ‚˜ package.json νŒŒμΌμ— ꡬ성을 μΆ”κ°€ν•˜λŠ” λŒ€μ‹  μ „μ—­ μ‹œκ°„ 초과λ₯Ό μƒμ„±ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄ ν…ŒμŠ€νŠΈ 폴더 μ•„λž˜μ— mocha.opts νŒŒμΌμ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. νŒŒμΌμ—μ„œ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•  합리적인 μ‹œκ°„ 초과 λ²”μœ„λ₯Ό μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€. 예:

--timeout 10000

λ‚˜λŠ” λ˜ν•œ κ·Έ 였λ₯˜κ°€ λ°œμƒν–ˆκ³  λͺ‡ μ‹œκ°„ λ™μ•ˆ μ‘°μ‚¬ν•˜κ³  λ””λ²„κΉ…ν•œ 후에 κ·Όλ³Έ 원인을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€.

λ‹€μŒ ν…ŒμŠ€νŠΈλ₯Ό κ³ λ €ν•˜μ‹­μ‹œμ˜€.

const delay = require('delay')

describe('Test', function() {
    it('should resolve', async function(done) {
      await delay(1000)
    })
})

ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

이제 done μΈμˆ˜κ°€ 제거된 μ•½κ°„ λ‹€λ₯Έ ν…ŒμŠ€νŠΈλ₯Ό κ³ λ €ν•˜μ‹­μ‹œμ˜€.

const delay = require('delay')

describe('Test', function() {
    it('should resolve', async function() {
      await delay(1000)
    })
})

이 ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λ©΄ ν†΅κ³Όν•©λ‹ˆλ‹€.

비동기 ν•¨μˆ˜μ— done μΈμˆ˜κ°€ 있으면 μ‚¬μš©λ˜μ§€ μ•Šκ³  ν…ŒμŠ€νŠΈκ°€ 끝날 λ•Œ done() 이 ν˜ΈμΆœλ˜λ”λΌλ„ ν…ŒμŠ€νŠΈκ°€ μ€‘λ‹¨λ©λ‹ˆλ‹€.

슀크립트 μ•„λž˜μ— package.json을 μΆ”κ°€ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

그럼 κ·Έλƒ₯ μ‹€ν–‰ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€

      npm test

"test" "scripts" 에 --timeout 10000 을 μΆ”κ°€ν•˜λ©΄ μ €μ—κ²Œ 맀λ ₯처럼 λ³΄μ˜€μŠ΅λ‹ˆλ‹€.
κ°μ‚¬ν•©λ‹ˆλ‹€!

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰