节点e2e测试 - 异步beforeEach / afterEach挂钩在Windows上失败

时间:2018-05-01 00:30:15

标签: node.js windows mongodb async-await mocha

在OSX和Linux上,以下工作效果很好(尽可能简化了复制,希望不会牺牲意义):

import { expect } from 'chai';
import { MongoClient, Db } from 'mongodb';
import { Application, Request } from 'express';
import { Server } from 'http';
import * as config from 'config';

describe('some test', () =>
{
    let Session:{ new(app:Application):Request } = require('supertest-session'),
        app:Application,
        server:Server,
        mongoClient:MongoClient,
        db:Db;

    beforeEach(async () =>
    {
        app = express();
        server = app.listen(config.Http.port);
        request = new Session(app);

        // On Windows tests are executed before this resolves
        mongoClient = await MongoClient.connect(config.Database.connectionOptions.url);

        db = mongoClient.db(config.Database.connectionOptions.database);
    });

    afterEach(async () =>
    {
        await db.dropDatabase();
        request.destroy();
        server.close();
    });

    it('works like it oughtta', () =>
    {
        request.post('/api/account/login')
            .send({ email: 'me@example.com', password: 'password' })
            .expect(200)
            .then((res) =>
            {
                expect(res.success).to.eq(true);
            })
    })
});

在Windows计算机上,上述操作失败,并显示以下npm输出:

13 verbose stack Exit status 4
13 verbose stack       at EventEmitter.<anonymous> (C:\Path\To\AppData\Roaming\nvm\v9.4.0\node_modules\npm\node_modules\npm-lifecycle\lib\index.js:285:16)
... rest of stack
13 verbose stack       at Process.ChildProcess._handle.onexit (internal/child_process.js:220:5)

如果我从beforeEach挂钩取出数据库连接并执行此操作,测试将运行并通过,但我仍然注意到在使用异步挂钩的进一步测试中难以跟踪失败:< / p>

before(function(done)
{
    MongoClient.connect(function(err, client)
    {
        mongoClient = client;
        done();
    });
});

after(function(done)
{
    mongoClient.close(function() { done(); });
});

我已经看过使用Mocha,Jest和FuseBox测试运行器的这种行为。在两台计算机上运行node@9.4。这个的解决方案不能“只是确保我在推送之前在Windows机器上测试我的测试”。

0 个答案:

没有答案