Mocking vscode API при модульном тестировании в Jest - PullRequest
1 голос
/ 08 октября 2019

Окружающая среда:

$ jest -v > 24.9.0
$ node -v > 10.15.3
"@types/vscode": "1.37.0"
"vscode": "^1.37.0"

Вдохновение пришло от Функции модульного тестирования, использующие функции API vscode extension

Слой косвенности решил часть моей проблемы! Однако мне нужно удалить следующую функцию из моего кода расширения, чтобы я мог выполнить модульное тестирование без зависимости vscode api:

await commands.executeCommand('vscode.open', uri);

Код рефакторинг для VscodeEnv следующим образом:

import { Uri, commands, ExtensionContext, WebviewPanel, Disposable } from 'vscode';

export type VSCodeWebviewPanel = WebviewPanel;
export { ExtensionContext as VSCodeExtensionContext };
export { Uri as VSCodeUri };

export class VscodeEnv {
    private static instance: VscodeEnv;
    private constructor() {
        // Nothing added
    }

    public static async executeCommand(command: string, ...rest: any[]): Promise<any | undefined> {
        return commands.executeCommand(command, rest);
    }

    public static registerCommand(command: string, callback: (...args: any[]) => any, thisArg: any): Disposable {
        return commands.registerCommand(command, callback, thisArg);
    }

    public static getInstance(): VscodeEnv {
        if (!VscodeEnv.instance) {
            VscodeEnv.instance = new VscodeEnv();
        }
        return VscodeEnv.instance;
    }
}

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

       const openFileCommand = new OpenFileCmd();
        VscodeEnv.registerCommand(
            ExtensionConfig.Commands.OpenFile.cmd,
            async (uri: VSCodeUri) => openFileCommand.openFile(context, uri.fsPath || ''), this);

И команды выполняются следующим образом:

await VscodeEnv.executeCommand(ExtensionConfig.Commands.Display.cmd, editParams);

При попытке вызвать * 1021 выдается следующее сообщение об ошибкес новым потоком:

Без контекста расширения

Еще несколько настроек для включения Jest, но это позволяет мне высмеивать API vscode.

Любые улучшенияБыл бы признателен или любая идея, почему контекст пуст?

Спасибо.

1 Ответ

0 голосов
/ 16 октября 2019

Проблема связана с параметрами, полученными методом обратного вызова, указанным при регистрации команды:

VSCodeEnv.registerCommand(
            ExtensionConfig.Commands.OpenFile.cmd,
            async (uri: VSCodeUri) => openFileCommand.openFile([context, (uri && uri.fsPath) || '']),
            this
        );

Где реализация должна измениться на следующее:

public async openFile(params: any[]): Promise<void> {

Inзаказ на разрушение объекта на работу.

...