Я хочу написать несколько модульных тестов со шуткой и mongoose для проверки взаимодействия данных с mongo.
Я не хочу издеваться над мангустом, потому что я специально хочу проверить, как создаются/модифицируются/обрабатываются документы манго.
package.json
сконфигурирован так, чтобы оставить модули node незафиксированными:
{
"jest": {
"unmockedModulePathPatterns": [
"node_modules"
]
}
}
В моем фактическом тесте я установил крюк beforeAll()
, чтобы позаботиться о подключении к mongo:
const mongoose = require('mongoose');
describe('MyTest', () => {
beforeAll((done) => {
mongoose.connect('mongodb://127.0.0.1:27017/test');
let db = mongoose.connection;
db.on('error', (err) => {
done.fail(err);
});
db.once('open', () => {
done();
});
});
it('has some property', () => {
// should pass but actually never gets run
expect(1).toBe(1);
});
});
Здесь вывод:
/usr/local/bin/node node_modules/jest-cli/bin/jest.js --verbose
Using Jest CLI v0.10.0, jasmine2
FAIL src/lib/controllers/my-controller/__tests__/my-test.js (5.403s)
MyTest
✕ it has some property
MyTest › it has some property
- Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
at Timer.listOnTimeout (timers.js:92:15)
1 test failed, 0 tests passed (1 total in 1 test suite, run time 5.903s)
Process finished with exit code 1
Время выполнения теста каждый раз, потому что done()
никогда не вызывается в hook beforeAll()
- никакие ошибки не выбрасываются или ничего не печатаются на консоли. Я могу разместить точки останова в тэге beforeAll()
для проверки кода. Похоже, что мангуста висит, пытаясь открыть соединение с Монго, а затем тесты на шутку выходят из строя.
Когда я запускаю аналогичный код вне среды шутки, он соединяется, как и ожидалось (почти мгновенно). Подозревая, что это может вызвать проблемы, я экспериментировал с отключением функции автомата jest полностью, но поведение остается неизменным.
Я предполагаю, что я пропустил что-то невероятно очевидное... любые идеи, что может происходить?
- jest-cli v. 0.10.0
- mongoose v. 4.4.11
Обновление:
- Пробная замена синтаксиса функции ES6 arrow с простым
function(done) {}
. Никакой разницы. - Попробовал выполнить асинхронный тест, передав параметр
done
и вызвав его при завершении теста. Никакой разницы. - Пробовал вызов
mongoose.connect()
после объявленияerror
иconnected
обработчиков событий - Пробовал комментировать весь связанный с мангустом код, чтобы проверить, что крюк
beforeAll()
работает правильно - это.