2016-12-01 3 views
3

Я пытаюсь засеять базу данных для модульного теста.Mocha: Ошибка времени ожидания 2000мс

Ниже seed.js файл:

....... 
const app = require('./app') 
const db = app.get('db') 

const saveUsersToDB = (done) => { 
    db.User.bulkCreate(users) 
     .then(() => (done)) 
} 

module.exports = {saveUsersToDB}; 

Мой app.test.js файл:

....... 
const expect = require('expect') 
const request = require('supertest') 
const {saveUsersToDB} = require('./seed/seed'); 

before(saveUsersToDB) 

Когда я запускаю тест ниже ошибки я получаю:

Express listening on port 3000! 
    1) "before all" hook: saveUsersToDB 

    0 passing (2s) 
    1 failing 

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

npm ERR! Test failed. See above for more details. 

Я думал, возвращаясь .then(() => (done)) было достаточно? Что я делаю не так?

+1

Это должно быть '.then (() => done())'. – Lewis

+0

Mocha также поддерживает обещания, поэтому спецификация может просто вернуть обещание. – estus

ответ

9

Потому что (done) фактически вернет функцию, а не вызывает ее. Чтобы позвонить done, вам нужно написать его таким образом.

.then(() => done()) 

Однако я не рекомендую использовать done наряду с обещаниями. Вам просто нужно вернуть обещание, тогда mocha будет обрабатывать его автоматически.

const saveUsersToDB =() => db.User.bulkCreate(users) 
+3

Хорошая точка! Вы также можете просто сделать '.then (done)' – Kalman

12

По умолчанию мокко тесты имеют 2 второго тайм-аут (что означает, что тест должен быть завершен в течение 2 секунд).

Вы можете увеличить (в miliiseconds) следующим образом:

this.timeout(5000); // this test can take up to 5 seconds 

https://mochajs.org/#timeouts

+1

Да, но настройка тайм-аута в этом случае не поможет. – naomik

+1

Это сработало для меня, большое спасибо –

2

Я была такая же isue. Эта ошибка ломается, потому что тайм-аут в 2 секунды, поэтому, если ваш тест нужно подключить к ddbb, он будет наиболее убедительно зависеть от него.

Что я сделал, чтобы отделить все мои тесты, необходимые Сомма вид подключения к внешним ресурсам в мою папку интеграции тестов, а затем добавили следующий флаг в моем package.json тестовый сценарий:

"int-test": "mocha --timeout 15000 tests/integration/**/*.test.js --compilers js:babel-register " 

Перейдите по этой ссылке другие способы увеличения таймаута: mocha timout

Смежные вопросы