我正在使用mocha并尝试在mocha挂钩之前/之后创建/删除sqlite数据库。但是,使用the node/sqlite library时,我在调用fs.unlinkSync(DB_PATH)
时收到“错误:EBUSY:资源忙或已锁定...”。
幸运的是,我之后可以删除该文件,因此我认为该问题与node / sqlite库没有释放文件描述符有关。有没有办法创建/关闭数据库连接然后在同一程序中删除数据库文件,或者程序必须退出才能删除文件?以下是代码示例(在Windows 10上,节点v6.10.0):
var sqlite3 = require('sqlite3');
var fs = require('fs');
var childProc = require('child_process');
before(function() {
childProc.execSync("sqlite3 ./test_db_data/test_db.sqlite3 < ./load_data/sql/init_model.sql").toString()
});
after(function() {
fs.unlinkSync(DB_PATH);
});
describe('tests', function() {
var db;
before(function(done) {
// set up database
new Promise(function(resolve, reject) {
console.log("Running promise");
db = new sqlite3.Database(DB_PATH, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, function(err) {
if (err) {
throw new Error("Couldn't create test database.");
}
resolve();
});
}).then(function() {
server = app.start(DB_PATH, done);
}, function(err) {
console.log("Error opening database");
done(err);
});
});
after(function(done) {
//stop server
server.close();
// delete database
db.close(function(err) {
if (!err) {
done();
} else {
console.log(err);
throw new Error("Couldn't close database connection.");
}
});
});