Runner
En runner i WebdriverIO organiserar hur och var tester körs när testrunner används. WebdriverIO stöder för närvarande två olika typer av runners: lokal runner och webbläsarrunner.
Local Runner
Local Runner initierar ditt ramverk (t.ex. Mocha, Jasmine eller Cucumber) inom en arbetsprocess och kör alla dina testfiler inom din Node.js-miljö. Varje testfil körs i en separat arbetsprocess per capability vilket möjliggör maximal samtidighet. Varje arbetsprocess använder en enda webbläsarinstans och kör därför sin egen webbläsarsession, vilket möjliggör maximal isolering.
Eftersom varje test körs i sin egen isolerade process är det inte möjligt att dela data mellan testfiler. Det finns två sätt att komma runt detta:
- använd
@wdio/shared-store-service
för att dela data mellan alla arbetare - gruppera specifikationsfiler (läs mer i Organizing Test Suite)
Om inget annat definieras i wdio.conf.js
är Local Runner standardrunnern i WebdriverIO.
Install
För att använda Local Runner kan du installera den via:
npm install --save-dev @wdio/local-runner
Setup
Local Runner är standardrunnern i WebdriverIO så det finns inget behov av att definiera den i din wdio.conf.js
. Om du vill ange den explicit kan du definiera den enligt följande:
// wdio.conf.js
export const {
// ...
runner: 'local',
// ...
}
Browser Runner
Till skillnad från Local Runner initierar och exekverar Browser Runner ramverket inom webbläsaren. Detta låter dig köra enhetstester eller komponenttester i en verklig webbläsare snarare än i en JSDOM som många andra testramverk.
Medan JSDOM är allmänt använd för testsyften, är det i slutändan inte en verklig webbläsare och du kan inte emulera mobila miljöer med den. Med denna runner möjliggör WebdriverIO för dig att enkelt köra dina tester i webbläsaren och använda WebDriver-kommandon för att interagera med element som renderas på sidan.
Här är en översikt över att köra tester inom JSDOM jämfört med WebdriverIOs Browser Runner
JSDOM | WebdriverIO Browser Runner | |
---|---|---|
1. | Kör dina tester inom Node.js med en re-implementering av webbstandarder, särskilt WHATWG DOM och HTML Standards | Kör dina tester i en verklig webbläsare och kör koden i en miljö som dina användare använder |
2. | Interaktioner med komponenter kan endast imiteras via JavaScript | Du kan använda WebdriverIO API för att interagera med element genom WebDriver-protokollet |
3. | Canvas-stöd kräver ytterligare beroenden och har begränsningar | Du har tillgång till det riktiga Canvas API |
4. | JSDOM har vissa begränsningar och webbAPI:er som inte stöds | Alla Web API:er stöds eftersom tester körs i en verklig webbläsare |
5. | Omöjligt att upptäcka fel mellan webbläsare | Stöd för alla webbläsare inklusive mobila webbläsare |
6. | Kan inte testa för element-pseudotillstånd | Stöd för pseudotillstånd som :hover eller :active |
Denna runner använder Vite för att kompilera din testkod och ladda den i webbläsaren. Den kommer med förinställningar för följande komponentramverk:
- React
- Preact
- Vue.js
- Svelte
- SolidJS
- Stencil
Varje testfil / testfilgrupp körs inom en enda sida, vilket innebär att mellan varje test laddas sidan om för att garantera isolering mellan tester.
Install
För att använda Browser Runner kan du installera den via:
npm install --save-dev @wdio/browser-runner
Setup
För att använda Browser runner måste du definiera en runner
-egenskap i din wdio.conf.js
-fil, t.ex.:
// wdio.conf.js
export const {
// ...
runner: 'browser',
// ...
}
Runner Options
Browser runner tillåter följande konfigurationer:
preset
Om du testar komponenter med ett av de nämnda ramverken ovan kan du definiera en förinställning som säkerställer att allt är konfigurerat direkt. Detta alternativ kan inte användas tillsammans med viteConfig
.
Type: vue
| svelte
| solid
| react
| preact
| stencil
Example:
export const {
// ...
runner: ['browser', {
preset: 'svelte'
}],
// ...
}
viteConfig
Definiera din egen Vite-konfiguration. Du kan antingen skicka in ett anpassat objekt eller importera en befintlig vite.conf.ts
-fil om du använder Vite.js för utveckling. Observera att WebdriverIO behåller anpassade Vite-konfigurationer för att konfigurera testmiljön.
Type: string
or UserConfig
or (env: ConfigEnv) => UserConfig | Promise<UserConfig>
Example:
import viteConfig from '../vite.config.ts'
export const {
// ...
runner: ['browser', { viteConfig }],
// or just:
runner: ['browser', { viteConfig: '../vites.config.ts' }],
// or use a function if your vite config contains a lot of plugins
// which you only want to resolve when value is read
runner: ['browser', {
viteConfig: () => ({
// ...
})
}],
// ...
}
headless
Om inställd på true
kommer runnern att uppdatera capabilities för att köra tester headless. Som standard är detta aktiverat inom CI-miljöer där en CI
-miljövariabel är inställd på '1'
eller 'true'
.
Type: boolean
Default: false
, inställd på true
om CI
-miljövariabeln är satt
rootDir
Projektets rotmapp.
Type: string
Default: process.cwd()
coverage
WebdriverIO stöder testövervakning genom istanbul
. Se Coverage Options för mer detaljer.
Type: object
Default: undefined
Coverage Options
Följande alternativ låter dig konfigurera kodtäckningsrapportering.
enabled
Aktiverar kodtäckningsinsamling.
Type: boolean
Default: false
include
Lista över filer som inkluderas i kodtäckning som glob-mönster.
Type: string[]
Default: [**]
exclude
Lista över filer som exkluderas i kodtäckning som glob-mönster.
Type: string[]
Default:
[
'coverage/**',
'dist/**',
'packages/*/test{,s}/**',
'**/*.d.ts',
'cypress/**',
'test{,s}/**',
'test{,-*}.{js,cjs,mjs,ts,tsx,jsx}',
'**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx}',
'**/*{.,-}spec.{js,cjs,mjs,ts,tsx,jsx}',
'**/__tests__/**',
'**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*',
'**/.{eslint,mocha,prettier}rc.{js,cjs,yml}',
]
extension
Lista över filändelser som rapporten ska inkludera.
Type: string | string[]
Default: ['.js', '.cjs', '.mjs', '.ts', '.mts', '.cts', '.tsx', '.jsx', '.vue', '.svelte']
reportsDirectory
Katalog att skriva kodtäckningsrapporten till.
Type: string
Default: ./coverage
reporter
Kodtäckningsrapportörer att använda. Se istanbul-dokumentationen för detaljerad lista över alla rapportörer.
Type: string[]
Default: ['text', 'html', 'clover', 'json-summary']
perFile
Kontrollera tröskelvärden per fil. Se lines
, functions
, branches
och statements
för de faktiska tröskelvärdena.
Type: boolean
Default: false
clean
Rensa kodtäckningsresultat innan tester körs.
Type: boolean
Default: true
lines
Tröskelvärde för rader.
Type: number
Default: undefined
functions
Tröskelvärde för funktioner.
Type: number
Default: undefined
branches
Tröskelvärde för grenar.
Type: number
Default: undefined
statements
Tröskelvärde för statements.
Type: number
Default: undefined
Limitations
När du använder WebdriverIO browser runner är det viktigt att notera att trådblockerade dialoger som alert
eller confirm
inte kan användas direkt. Detta beror på att de blockerar webbsidan, vilket innebär att WebdriverIO inte kan fortsätta kommunicera med sidan, vilket gör att exekveringen hänger sig.
I sådana situationer tillhandahåller WebdriverIO standardmockar med standardreturnerade värden för dessa API:er. Detta säkerställer att om användaren av misstag använder synkrona popup-webb-API:er, skulle exekveringen inte hänga sig. Det rekommenderas dock fortfarande att användaren mockar dessa webb-API:er för bättre upplevelse. Läs mer i Mocking.
Examples
Se till att kolla in dokumentationen kring komponenttestning och titta på exempelrepositoriet för exempel som använder dessa och andra ramverk.