Hopp til hovedinnhold
Versjon: 30.0

Watch Plugins

Unofficial Beta Translation

This page was AI-translated by PageTurner (beta). Not officially endorsed by the project. Found an error? Report issue →

Jest sin watch plugin-system lar deg koble deg til spesifikke deler av Jest og definere menyvalg i watch-modus som utfører kode ved tastetrykk. Disse funksjonene sammen gir deg muligheten til å utvikle skreddersydde interaktive opplevelser for din arbeidsflyt.

Watch Plugin-grensesnitt

class MyWatchPlugin {
// Add hooks to Jest lifecycle events
apply(jestHooks) {}

// Get the prompt information for interactive plugins
getUsageInfo(globalConfig) {}

// Executed when the key from `getUsageInfo` is input
run(globalConfig, updateConfigAndRun) {}
}

Kobling til Jest

For å koble din watch plugin til Jest, legg til banen under watchPlugins i Jest-konfigurasjonen din:

jest.config.js
module.exports = {
// ...
watchPlugins: ['path/to/yourWatchPlugin'],
};

Egendefinerte watch plugins kan legge til hooks for Jest-hendelser. Disse hookene kan legges til enten med eller uten en interaktiv tast i watch-menyen.

apply(jestHooks)

Jest-hooks kan festes ved å implementere apply-metoden. Denne metoden mottar et jestHooks-argument som lar pluginen koble seg til spesifikke deler av en testkjørings livssyklus.

class MyWatchPlugin {
apply(jestHooks) {}
}

Nedenfor er hookene som er tilgjengelige i Jest.

jestHooks.shouldRunTestSuite(testSuiteInfo)

Returnerer en boolsk verdi (eller Promise<boolean> for asynkrone operasjoner) som angir om en test skal kjøres eller ikke.

For eksempel:

class MyWatchPlugin {
apply(jestHooks) {
jestHooks.shouldRunTestSuite(testSuiteInfo => {
return testSuiteInfo.testPath.includes('my-keyword');
});

// or a promise
jestHooks.shouldRunTestSuite(testSuiteInfo => {
return Promise.resolve(testSuiteInfo.testPath.includes('my-keyword'));
});
}
}

jestHooks.onTestRunComplete(results)

Kalles på slutten av hver testkjøring. Har testresultatene som argument.

For eksempel:

class MyWatchPlugin {
apply(jestHooks) {
jestHooks.onTestRunComplete(results => {
this._hasSnapshotFailure = results.snapshot.failure;
});
}
}

jestHooks.onFileChange({projects})

Kalles ved endringer i filsystemet

  • projects: Array<config: ProjectConfig, testPaths: Array<string>: Inkluderer alle testbaner som Jest overvåker.

For eksempel:

class MyWatchPlugin {
apply(jestHooks) {
jestHooks.onFileChange(({projects}) => {
this._projects = projects;
});
}
}

Integrasjon med Watch-meny

Egendefinerte watch plugins kan også legge til eller overstyre funksjonalitet i watch-menyen ved å spesifisere et tast/prompt-par i getUsageInfo-metoden og en run-metode for utførelse av tasten.

getUsageInfo(globalConfig)

For å legge til en tast i watch-menyen, implementer getUsageInfo-metoden og returner en tast og et prompt:

class MyWatchPlugin {
getUsageInfo(globalConfig) {
return {
key: 's',
prompt: 'do something',
};
}
}

Dette vil legge til en linje i watch-modus-menyen (› Press s to do something.)

Watch Usage
› Press p to filter by a filename regex pattern.
› Press t to filter by a test name regex pattern.
› Press q to quit watch mode.
› Press s to do something. // <-- This is our plugin
› Press Enter to trigger a test run.
notat

Hvis din plugins tast allerede finnes som standardtast, vil din plugin overstyre denne tasten.

run(globalConfig, updateConfigAndRun)

For å håndtere tastetrykk fra tasten returnert av getUsageInfo, kan du implementere run-metoden. Denne metoden returnerer en Promise<boolean> som kan løses når pluginen ønsker å returnere kontroll til Jest. boolean-verdien angir om Jest skal kjøre testene på nytt etter å ha fått tilbake kontrollen.

  • globalConfig: Representerer Jest's nåværende globale konfigurasjon

  • updateConfigAndRun: Lar deg utløse en testkjøring mens den interaktive pluginen kjører.

class MyWatchPlugin {
run(globalConfig, updateConfigAndRun) {
// do something.
}
}
notat

Hvis du kaller updateConfigAndRun, bør ikke run-metoden din løses til en sann verdi, da dette vil utløse en dobbeltkjøring.

Godkjente konfigurasjonstaster

Av stabilitets- og sikkerhetshensyn kan kun deler av de globale konfigurasjonstastene oppdateres med updateConfigAndRun. Den nåværende godkjente listen er som følger:

Tilpasning

Plugins kan tilpasses via Jest-konfigurasjonen din.

jest.config.js
module.exports = {
// ...
watchPlugins: [
[
'path/to/yourWatchPlugin',
{
key: 'k', // <- your custom key
prompt: 'show a custom prompt',
},
],
],
};

Anbefalte konfigurasjonsnavn:

  • key: Endrer plugin-tasten.

  • prompt: Lar brukeren tilpasse teksten i plugin-spørringen.

Hvis brukeren har angitt en egendefinert konfigurasjon, vil denne bli sendt som argument til plugin-konstruktøren.

class MyWatchPlugin {
constructor({config}) {}
}

Velge en god tast

Jest tillater tredjeparts-plugins å overstyre noen av sine innebygde funksjonstaster, men ikke alle. Spesielt er følgende taster ikke overstyrbare:

  • c (fjerner filtermønstre)

  • i (oppdaterer ikke-samsvarende snapshots interaktivt)

  • q (avslutter)

  • u (oppdaterer alle ikke-samsvarende snapshots)

  • w (viser bruk av overvåkingsmodus / tilgjengelige handlinger)

Følgende taster for innebygd funksjonalitet kan overstyres:

  • p (test-filnavnmønster)

  • t (testnavn-mønster)

Alle taster som ikke brukes av innebygd funksjonalitet kan brukes, som du sannsynligvis forventer. Unngå å bruke taster som er vanskelige å finne på ulike tastatur (f.eks. é, ), eller som ikke er synlige som standard (f.eks. mangler mange Mac-tastatur visuelle hint for tegn som |, \, [, osv.)

Ved konflikt

Hvis plugin-en din prøver å overstyre en reservert tast, vil Jest gi en feilmelding med beskrivende tekst, omtrent slik:


Watch plugin YourFaultyPlugin attempted to register key `q`, that is reserved internally for quitting watch mode. Please change the configuration key for this plugin.

Tredjeparts-plugins har heller ikke lov til å overstyre en tast som allerede er reservert av en annen tredjeparts-plugin tidligere i listen over konfigurerte plugins (watchPlugins-array-innstilling). Når dette skjer, får du også en feilmelding som prøver å hjelpe deg med å løse problemet:


Watch plugins YourFaultyPlugin and TheirFaultyPlugin both attempted to register key `x`. Please change the key configuration for one of the conflicting plugins to avoid overlap.