Я пытаюсь проверить интерфейс команды в моем расширении. Когда я запускаю тест, он завершает работу без каких-либо сообщений об ошибках до достижения функции 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();
});
});
Тест завершается в случайных местах. Иногда тесты проходят правильно, но чаще всего выходят до подтверждения. Я считаю, что это как-то связано с асинхронностью кода, но я видел похожий код в других тестах, например здесь .