Watch Plugins
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:
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.
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.
}
}
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.
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.