Мокко не выходит после теста - PullRequest
0 голосов
/ 16 мая 2018

Я начинаю с тестов в Node. Использование mocha, chai и nock (для перехвата внешних HTTP-вызовов API).

Я написал 3 теста, все они пройдены, однако, когда я добавил третий тест, mocha прекратил выход после выполнения тестов, без ошибок или указаний на что-то неправильное.

Если я прокомментирую 3-й тест, мокко выйдет просто отлично.

Это тест, вызывающий «проблему»:

describe('tokenizer.processFile(req, \'tokenize\')', () => {

    it('should tokenize a file', async () => {

        req = {
            file: {
                originalname: 'randomcards.txt',
                buffer: cardsFile_buffer
            },
            user: {
                displayName: user
            }
        };

        expect(Buffer.from(await tokenizer.processFile(req, 'tokenize'))).to.deep.equal(tokensFile_buffer);

    });

});

Опять же, этот тест - пропуск, который сбивает меня с толку.

Вот код tokenizer.processFile:

processFile: function(req, whatTo){

        combinedLogger.info(`Request to ${whatTo} ${req.file.originalname} received. Made by: ${req.user.displayName}`);

        return new Promise(function(resolve, reject){

            const lines = [], responses = [];

            const lineReader = require('readline').createInterface({
                input: require('streamifier').createReadStream(req.file.buffer)
            });

            lineReader.on('line', line => {
                lines.push(line);
            });

            lineReader.on('close', async () => {

                //process every line sequentially

                try {

                    //ensure DB connected to mass insert
                    await db_instance.get_pool();

                    for(const line of lines) {
                        var response;
                        req.current_value = line;
                        if (whatTo == 'tokenize'){

                            response = await Tokenize(line);
                            db_instance.insertAction(req, 'tokenize', response);
                        }
                        else if (whatTo == 'detokenize'){
                            combinedLogger.info(`Request to detokenize ${line} received. Made by: ${req.user.displayName}`);
                            response = await Detokenize(line);
                            db_instance.insertAction(req, 'detokenize', line);
                        }
                        responses.push(response);
                    }

                    resolve(responses.join("\r\n"));

                }
                catch(error){
                    reject(error);
                }
            });

        });

    }

Функции Tokenize (значение) и Detokenize (значение) также вызываются в двух других тестах, которые при запуске mocha завершаются очень хорошо.

Есть идеи, что вызвало это?

Мокко версия: 5.1.1

1 Ответ

0 голосов
/ 03 сентября 2018

Я знаю, что уже поздно отвечать на этот вопрос, но я столкнулся с подобной проблемой и увидел ваш пост.

В mocha 4.0.0 они изменили поведение тестов при финализации. С here :

Если процесс mocha все еще жив после того, как ваши тесты кажутся «выполненными», то ваши тесты запланировали что-то, что должно произойти (асинхронно) и не очистили себя должным образом,Вы оставили розетку открытой?

В вашем случае кажется, что вызов createReadStream() никогда не был закрыт.

Итак, у вас есть 2 варианта:

Опция A: Закрытие открытых файлов и других потоков (рекомендуется)

Опция B: Запуск mocha с опцией --exit.

...