Hoppa till huvudinnehåll

Testning av VS Code-tillägg

WebdriverIO låter dig sömlöst testa dina VS Code-tillägg från end-to-end i VS Code Desktop IDE eller som webbtillägg. Du behöver bara ange en sökväg till ditt tillägg så sköter ramverket resten. Med wdio-vscode-service tas allt om hand och mycket mer:

  • 🏗️ Installerar VSCode (antingen stabil, insiders eller en specificerad version)
  • ⬇️ Laddar ner Chromedriver specifikt för given VSCode-version
  • 🚀 Gör det möjligt att komma åt VSCode API från dina tester
  • 🖥️ Startar VSCode med anpassade användarinställningar (inklusive stöd för VSCode på Ubuntu, MacOS och Windows)
  • 🌐 Eller serverar VSCode från en server för att nås av vilken webbläsare som helst för testning av webbtillägg
  • 📔 Skapar page objects med lokalisatorer som matchar din VSCode-version

Komma igång

För att starta ett nytt WebdriverIO-projekt, kör:

npm create wdio@latest ./

En installationsguide kommer att vägleda dig genom processen. Se till att välja "VS Code Extension Testing" när den frågar vilken typ av testning du vill göra, därefter kan du behålla standardinställningarna eller ändra efter dina preferenser.

Exempelkonfiguration

För att använda tjänsten behöver du lägga till vscode i din lista över tjänster, eventuellt följt av ett konfigurationsobjekt. Detta gör att WebdriverIO laddar ner angivna VSCode-binärer och lämplig Chromedriver-version:

// wdio.conf.ts
export const config = {
outputDir: 'trace',
// ...
capabilities: [{
browserName: 'vscode',
browserVersion: '1.71.0', // "insiders" eller "stable" för senaste VSCode-versionen
'wdio:vscodeOptions': {
extensionPath: __dirname,
userSettings: {
"editor.fontSize": 14
}
}
}],
services: ['vscode'],
/**
* valfritt kan du definiera sökvägen där WebdriverIO lagrar alla
* VSCode- och Chromedriver-binärer, t.ex.:
* services: [['vscode', { cachePath: __dirname }]]
*/
// ...
};

Om du definierar wdio:vscodeOptions med något annat browserName än vscode, t.ex. chrome, kommer tjänsten att servera tillägget som ett webbtillägg. Om du testar på Chrome behövs ingen ytterligare drivrutinstjänst, t.ex.:

// wdio.conf.ts
export const config = {
outputDir: 'trace',
// ...
capabilities: [{
browserName: 'chrome',
'wdio:vscodeOptions': {
extensionPath: __dirname
}
}],
services: ['vscode'],
// ...
};

Observera: när du testar webbtillägg kan du bara välja mellan stable eller insiders som browserVersion.

TypeScript-inställning

I din tsconfig.json, se till att lägga till wdio-vscode-service till din lista över typer:

{
"compilerOptions": {
"types": [
"node",
"webdriverio/async",
"@wdio/mocha-framework",
"expect-webdriverio",
"wdio-vscode-service"
],
"target": "es2020",
"moduleResolution": "node16"
}
}

Användning

Du kan sedan använda metoden getWorkbench för att komma åt page objects för lokalisatorerna som matchar din önskade VSCode-version:

describe('WDIO VSCode Service', () => {
it('should be able to load VSCode', async () => {
const workbench = await browser.getWorkbench()
expect(await workbench.getTitleBar().getTitle())
.toBe('[Extension Development Host] - README.md - wdio-vscode-service - Visual Studio Code')
})
})

Därifrån kan du komma åt alla page objects genom att använda rätt page object-metoder. Ta reda på mer om alla tillgängliga page objects och deras metoder i page object-dokumentationen.

Åtkomst till VSCode APIs

Om du vill utföra viss automatisering genom VSCode API kan du göra det genom att köra fjärrkommandon via det anpassade kommandot executeWorkbench. Detta kommando låter dig fjärrutföra kod från ditt test inne i VSCode-miljön och ger möjlighet att komma åt VSCode API. Du kan skicka godtyckliga parametrar till funktionen som sedan kommer att propageras till funktionen. Objektet vscode kommer alltid att skickas in som första argument följt av de yttre funktionsparametrarna. Observera att du inte kan komma åt variabler utanför funktionens omfattning eftersom callback-funktionen utförs på distans. Här är ett exempel:

const workbench = await browser.getWorkbench()
await browser.executeWorkbench((vscode, param1, param2) => {
vscode.window.showInformationMessage(`I am an ${param1} ${param2}!`)
}, 'API', 'call')

const notifs = await workbench.getNotifications()
console.log(await notifs[0].getMessage()) // skriver ut: "I am an API call!"

För fullständig page object-dokumentation, kolla in dokumentationen. Du kan hitta olika användningsexempel i detta projekts testsvit.

Mer information

Du kan lära dig mer om hur du konfigurerar wdio-vscode-service och hur du skapar anpassade page objects i tjänstdokumentationen. Du kan också titta på följande föredrag av Christian Bromann om Testing Complex VSCode Extensions With the Power of Web Standards:

Welcome! How can I help?

WebdriverIO AI Copilot