Тесты Node e2e - асинхронизация перехватчиков beforeEach / afterEach в Windows - PullRequest
0 голосов
/ 01 мая 2018

В 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 и сделаю это вместо этого, тест запустится и пройдет, но я все еще замечаю сложные ошибки в последующих тестах с асинхронными хуками:

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

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

Я видел такое поведение при использовании тестов Mocha, Jest и FuseBox. Запуск узла @ 9.4 на обеих машинах. Решение этого не может быть «просто убедитесь, что я тестирую свои тесты на компьютере с Windows, прежде чем нажать».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...