2015-11-07 48 views
0

雖然單元測試我的Node.js應用程序,我遇到了一個問題,摩卡和ES6同時使用setTimeoutMochaJS的setTimeout ES6

摩卡表示測試通過了,但是當我把別的東西(檢查測試,以確保它的工作原理),它仍然表示,它獲得通過,而應該失敗。

代碼:

describe('.checkToken', function() { 
    let user = {}; 
    let token = repository.newToken(); 

    it('token has expired', co.wrap(function*() { 
      setTimeout(function*() { 
       let result = yield repository.checkToken(user, token.token); 
       result.body.should.have.property("error"); 
      }, 1000) 
     })); 
    }); 
}); 

其他測試都在努力並沒有在這種情況下沒有問題。

我已經嘗試過的箭頭功能或在setTimeout回調的標準功能,但隨後崩潰的產量。 (Unexpected token)

checkToken是發電機的功能。

使用:

  • 的NodeJS V4.2.1
  • 有限公司v4.6.0
  • 應該V7.1.0
  • 摩卡v2.3.3

回答

3

不能使用setTimeout與發電機。這是您傳遞給co.wrap將被異步運行的發電機,並需要了解超時。您需要yield超時(的東西yieldable,像一個thunk或承諾):

it('token has expired', co.wrap(function*() { 
    yield new Promise(resolve => { setTimeout(resolve, 1000); }); 
    let result = yield repository.checkToken(user, token.token); 
    result.body.should.have.property("error"); 
})); 
+0

謝謝你,就像一個魅力! – CreasolDev