我的mocha测试失败了:
MongoError:服务器XXXX套接字已关闭
我有一个解决方法如何修复它们:
const https = require('https');
const server = https.createServer(..);
close() {
mongoose.disconnect(); // <-------- I will comment this line
this.server.close();
};
我会注释掉mongoose.disconnect();
行,我的测试套件开始工作。我也想在测试后清理一下。我的每个测试文件都重新创建服务器并从头开始。似乎出现错误是因为在下一个测试文件执行之前需要进行一些“等待”。
如何更正此错误?
答案 0 :(得分:1)
如果我理解正确,您希望在测试后启动并清理服务器。在每次测试之前和之后,您还需要执行一系列重复性任务。
Mocha为您提供完美的解决方案:向胡克先生问好!
Mocha挂钩是您可以在所有测试之前,所有测试之后,或每次测试之前以及每次测试之后运行的函数:
文档非常完整,我确实推荐它。不过我是你的情况,因为你正在处理数据库,你可能会处理async
钩子。
听起来很复杂?别担心!
这是正常sync
挂钩的工作原理:
describe('hooks', function() {
before(function() {
// runs before all tests in this block
});
after(function() {
// runs after all tests in this block
});
beforeEach(function() {
// runs before each test in this block
});
afterEach(function() {
// runs after each test in this block
});
//tests
it("This is a test", () => {
assert.equal(1, 1);
});
});
async
个钩子只有一个区别:它们有一个参数done
,一旦你的任务完成就会被调用。让我们假设我们正在设置一个需要1.5秒才能完成安装的数据库。我们希望在所有测试之前完成此操作,我们只想做一次。
我们假设这是我们的DB中的listen
函数:
const listen = callback => {
setTimeout(callback, 1500);
};
因此,在1.5秒后,它会调用回调函数,表明它已做好准备采取行动。
现在让我们看看如何制作async
钩子:
describe('hooks', function() {
let myDB;
before( done => {
myDB = newDB();
myDB(done);
});
//tests
});
就是这样!希望它有所帮助!