Я пытаюсь использовать Jest для запуска модульных тестов с моим приложением Node.js.
Я создал сценарий установки, чтобы закрыть соединение с mongoose, вызвав функцию afterAll()
.
У меня проблема в том, что после запуска модульного теста в консоли отображается ошибка MongoError: topology was destroyed
.
Я считаю, что это связано с тем, как я реализую асинхронные функции ... может быть, я не жду достаточно долго, чтобы вернуть обещание? Смотрите код ниже.
Jest Config (package.json):
"jest": {
"testEnvironment": "node",
"setupFilesAfterEnv": [
"./tests/setup.js"
]
},
Сценарий установки (./tests/setup.js):
const mongoose = require("mongoose");
const config = require("../config/config");
beforeAll(async function() {
// Define database credentials.
let dbUser = encodeURIComponent(config.db.username);
let dbPass = encodeURIComponent(config.db.password);
let dbDatabase = encodeURIComponent(config.db.database);
let mongoUri = `mongodb://${dbUser}:${dbPass}@${config.db.host}:${config.db.port}/${dbDatabase}`;
// Connect to the database.
await mongoose.connect(mongoUri, { useNewUrlParser: true }, function(err) {
if(err) throw err;
});
});
beforeEach(async function() {
// Clear the database.
await mongoose.connection.dropDatabase(function(err) {
if(err) throw err;
});
});
afterAll(async function() {
// Terminate the database connection.
mongoose.connection.close(function(err) {
if(err) throw err;
});
});
Модульный тест (./tests/models/api_session.test.js):
const ApiSession = require("../../app/models/api_session");
describe("new session", function() {
test("valid session", function(done) {
let apiSession = new ApiSession({ authCode: "12345" });
apiSession.save(function(err, result) {
if(err) done(err);
expect(result.authCode).toBe("12345");
done();
});
});
test("empty session", function(done) {
let apiSession = new ApiSession();
apiSession.save(function(err) {
expect(err.name).toBe("ValidationError");
done();
});
});
});
Ответ (тест npm):
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 0.852s, estimated 1s
Ran all test suites.
MongoError: topology was destroyed
...