VSCode / Mocha преждевременно завершает работу при выполнении расширенных тестов - PullRequest
1 голос
/ 16 февраля 2020

Я пытаюсь проверить интерфейс команды в моем расширении. Когда я запускаю тест, он завершает работу без каких-либо сообщений об ошибках до достижения функции assert.equal().

Код моего теста выглядит следующим образом:

suite("Extension Tests", () => {

    const fixtureFolderLocation = "../fixture/";

    test("Wrap in parentheses", async () => {
        const uri = vscode.Uri.file(
            path.join(__dirname, fixtureFolderLocation, "fixture2.html"),
        );

        const document = await vscode.workspace.openTextDocument(uri);

        const editor = await vscode.window.showTextDocument(document);
        editor.selection = new vscode.Selection(new vscode.Position(0, 0), new vscode.Position(0, 4));

        await vscode.commands.executeCommand("nkatex.wrapInParentheses");

        const text = document.getText(new vscode.Range(new vscode.Position(0, 0), new vscode.Position(0, 21)));
        assert.equal(text, "\\left ( word\\right ) ");
    });

});

Вывод теста:

$ node ./out/test/runTest.js
Found .vscode-test/vscode-1.42.1. Skipping download.
[main 2020-02-16T15:06:03.708Z] update#setState idle



  Extension Tests

Exit code:   0
Done

Done in 17.30s.

runTest.ts:

async function main() {
    try {
        // Download VS Code, unzip it and run the integration test
        await runTests({
            extensionDevelopmentPath: path.resolve(__dirname, "../../"),
            extensionTestsPath: path.resolve(__dirname, "./suite"),
            launchArgs: [
                "--disable-extensions",
            ],
        });
    } catch (err) {
        console.error("Failed to run tests");
        process.exit(1);
    }
}

main();

index.ts:

export const run = async (): Promise<void> => {

    // Create the mocha test
    const mocha = new Mocha({
        ui: "tdd",
    });
    mocha.useColors(true);

    const testsRoot = path.resolve(__dirname, "..");

    const files = await async.glob("**/**.test.js", { cwd: testsRoot });
    for (const file of files) {
        mocha.addFile(path.resolve(testsRoot, file));
    }

    mocha.run((failureNumber) => {
        if (failureNumber > 0) {
            throw new Error(`${failureNumber} tests failed.`);
        }
    });

};

Я также пытался использовать функцию done() и ожидание определенного количества c времени, но это не помогло:

const sleep = (ms = 1000) => new Promise((resolve) => setTimeout(resolve, ms));

suite("Extension Tests", () => {

    const fixtureFolderLocation = "../fixture/";

    test("Wrap in parentheses", async (done) => {
        const uri = vscode.Uri.file(
            path.join(__dirname, fixtureFolderLocation, "fixture2.html"),
        );

        const document = await vscode.workspace.openTextDocument(uri);

        const editor = await vscode.window.showTextDocument(document);
        await sleep(2000);

        editor.selection = new vscode.Selection(new vscode.Position(0, 0), new vscode.Position(0, 4));

        await vscode.commands.executeCommand("nkatex.wrapInParentheses");
        await sleep();

        const text = document.getText(new vscode.Range(new vscode.Position(0, 0), new vscode.Position(0, 21)));
        assert.equal(text, "\\left ( word\\right ) ");
        done();
    });

});

Тест завершается в случайных местах. Иногда тесты проходят правильно, но чаще всего выходят до подтверждения. Я считаю, что это как-то связано с асинхронностью кода, но я видел похожий код в других тестах, например здесь .

...