为什么在第一个文件之后运行的测试文件出现超时错误?

时间:2018-12-20 00:08:29

标签: express mocha

第一个超时后,我正在测试我的快速端点和任何测试文件。它们在尝试执行数据库操作时会超时。

我导出服务器对象(在index.js中),并且在该文件中,有用于设置中间件,路由,数据库连接等的启动脚本。我尝试捕获在数据库上运行的任何代码中的错误,但是没有任何显示。我只知道访问数据库时超时。也许我关闭不正确,或者存在某些比赛条件。

const { Student } = require('../../../models/student');

const mocksdk = require('../../firebaseMock');
const { expect } = require('chai');
const request = require('supertest');
const mongoose = require('mongoose');

describe('authStudent Middleware', () => {

    let token;
    let server;

    before(async () => {
        server = require('../../../index');

        // Create a firebase user and get the token
        mocksdk.auth().autoFlush();
        mocksdk.auth().createUser({
            uid: '123',
            email: 'test@mail.com',
            password: 'test'
        });

        // Assign student role to user
        mocksdk.auth().setCustomUserClaims({ role: 0 });

        const user = await mocksdk.auth().getUser('123');
        token = await user.getIdToken();
    });

    after(async () => {
        await Student.deleteMany({});
        await mongoose.disconnect();
        await server.close();
    });

    it('should return 200 if the token is valid', async () => {
        const res = await request(server)
            .get('/students/me')
            .set('Authorization', 'Bearer ' + token);

        expect(res.status).to.be.equal(200);
    }); 
});

在从数据库中删除时,在钩子中超时,而在获取用户信息时,在students / me端点中超时。

编辑:我也尝试增加超时时间,但这不起作用。

1 个答案:

答案 0 :(得分:0)

我通过创建一个testSetup文件解决了我的问题。如果挂钩不在描述块中,则将其视为根挂钩(mocha docs)。因此,在此testSetup中,我放置了一个before()和after()钩子,我需要运行服务器并在before钩子中设置数据库并导出服务器的index.js(以便可以在实际中使用它。测试文件)。之后,我关闭了服务器和数据库连接。现在似乎可以正常工作,如果有更好的方法,或者我的初始代码或此代码有缺陷,请告诉我。