99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Jest 監(jiān)視插件

2021-09-18 20:34 更新

Jest 監(jiān)視插件系統(tǒng)提供了一種方法,可以連接 Jest 的特定部分,并定義在按鍵時(shí)執(zhí)行代碼的監(jiān)視模式菜單提示。結(jié)合這些功能,你可以范圍根據(jù)自己的工作流程開(kāi)發(fā)自定義的交互式體驗(yàn)。

監(jiān)視插件界面

  1. class MyWatchPlugin {
  2. // Add hooks to Jest lifecycle events
  3. apply(jestHooks) {}
  4. // Get the prompt information for interactive plugins
  5. getUsageInfo(globalConfig) {}
  6. // Executed when the key from `getUsageInfo` is input
  7. run(globalConfig, updateConfigAndRun) {}
  8. }

連接Jest

要將你的監(jiān)視插件連接到 Jest,請(qǐng)將其路徑添加?watchPlugins?到你的 Jest 配置中:

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

自定義監(jiān)視插件可以為 Jest 事件添加鉤子。在監(jiān)視模式菜單中,可以使用或不使用交互鍵來(lái)添加這些掛鉤。

apply(jestHooks)

可以通過(guò)實(shí)現(xiàn)該?apply?方法來(lái)附加 Jest 鉤子。此方法接收一個(gè)?jestHooks?參數(shù),該參數(shù)允許插件掛鉤到測(cè)試運(yùn)行生命周期的特定部分。

  1. class MyWatchPlugin {
  2. apply(jestHooks) {}
  3. }

下面是 Jest 中可用的鉤子。

jestHooks.shouldRunTestSuite(testSuiteInfo)

返回一個(gè)布爾值(或?Promise<boolean>?用于處理異步操作)以指定是否應(yīng)運(yùn)行測(cè)試。

例如:

  1. class MyWatchPlugin {
  2. apply(jestHooks) {
  3. jestHooks.shouldRunTestSuite(testSuiteInfo => {
  4. return testSuiteInfo.testPath.includes('my-keyword');
  5. });
  6. // or a promise
  7. jestHooks.shouldRunTestSuite(testSuiteInfo => {
  8. return Promise.resolve(testSuiteInfo.testPath.includes('my-keyword'));
  9. });
  10. }
  11. }

jestHooks.onTestRunComplete(results)

在每次測(cè)試運(yùn)行結(jié)束時(shí)調(diào)用。它將測(cè)試結(jié)果作為參數(shù)。

例如:

  1. class MyWatchPlugin {
  2. apply(jestHooks) {
  3. jestHooks.onTestRunComplete(results => {
  4. this._hasSnapshotFailure = results.snapshot.failure;
  5. });
  6. }
  7. }

jestHooks.onFileChange({projects})

每當(dāng)文件系統(tǒng)發(fā)生變化時(shí)被調(diào)用

  • ?projects: Array<config: ProjectConfig, testPaths: Array<string>?:包括 Jest 正在觀察的所有測(cè)試路徑。

例如:

  1. class MyWatchPlugin {
  2. apply(jestHooks) {
  3. jestHooks.onFileChange(({projects}) => {
  4. this._projects = projects;
  5. });
  6. }
  7. }

監(jiān)視菜單集成

自定義監(jiān)視插件還可以通過(guò)在?getUsageInfo?方法中指定鍵/提示對(duì)和?run?執(zhí)行鍵的方法來(lái)向監(jiān)視菜單添加或覆蓋功能。

getUsageInfo(globalConfig)

要向監(jiān)視菜單添加一個(gè)鍵,請(qǐng)實(shí)現(xiàn)該?getUsageInfo?方法,返回一個(gè)鍵和提示:

  1. class MyWatchPlugin {
  2. getUsageInfo(globalConfig) {
  3. return {
  4. key: 's',
  5. prompt: 'do something',
  6. };
  7. }
  8. }

這將在監(jiān)視模式菜單中添加一行( ?? Press s to do something.?)

  1. Watch Usage
  2. ? Press p to filter by a filename regex pattern.
  3. ? Press t to filter by a test name regex pattern.
  4. ? Press q to quit watch mode.
  5. ? Press s to do something. // <-- This is our plugin
  6. ? Press Enter to trigger a test run.

注意:如果你的插件的密鑰已作為默認(rèn)密鑰存在,你的插件將覆蓋該密鑰。

run(全局配置, 更新配置并運(yùn)行)

要處理來(lái)自?getUsageInfo?返回的鍵的按鍵事件,可以實(shí)現(xiàn)該run?方法。此方法返回一個(gè)?Promise<boolean>? ,當(dāng)插件想要將控制權(quán)返回給 Jest 時(shí),可以解析這個(gè) Promise。?boolean?指定 Jest 在獲得控件后是否應(yīng)重新運(yùn)行測(cè)試

  • ?globalConfig?: Jest 當(dāng)前全局配置的表示
  • ?updateConfigAndRun?:允許在交互式插件運(yùn)行時(shí)觸發(fā)測(cè)試運(yùn)行。
  1. class MyWatchPlugin {
  2. run(globalConfig, updateConfigAndRun) {
  3. // do something.
  4. }
  5. }

注意:如果調(diào)用?updateConfigAndRun?,你的?run?方法不應(yīng)解析為真值,因?yàn)檫@會(huì)觸發(fā)雙重運(yùn)行。

授權(quán)配置密鑰

出于穩(wěn)定性和安全原因,只有部分全局配置鍵可以使用?updateConfigAndRun?. 目前白名單如下:

  • ?bail?
  • ?changedSince?
  • ?collectCoverage?
  • ?collectCoverageFrom?
  • ?collectCoverageOnlyFrom?
  • ?coverageDirectory?
  • ?coverageReporters?
  • ?notify?
  • ?notifyMode?
  • ?onlyFailures?
  • ?reporters?
  • ?testNamePattern?
  • ?testPathPattern?
  • ?updateSnapshot?
  • ?verbose?

定制

插件可以通過(guò)你的 Jest 配置進(jìn)行定制。

  1. // jest.config.js
  2. module.exports = {
  3. // ...
  4. watchPlugins: [
  5. [
  6. 'path/to/yourWatchPlugin',
  7. {
  8. key: 'k', // <- your custom key
  9. prompt: 'show a custom prompt',
  10. },
  11. ],
  12. ],
  13. };

推薦的配置名稱(chēng):

  • ?key?: 修改插件密鑰。
  • ?prompt?:允許用戶自定義插件提示中的文本。

如果用戶提供了自定義配置,它將作為參數(shù)傳遞給插件構(gòu)造函數(shù)。

  1. class MyWatchPlugin {
  2. constructor({config}) {}
  3. }

選擇一把好鑰匙

Jest 允許第三方插件覆蓋其一些內(nèi)置功能鍵,但不是全部。具體來(lái)說(shuō),以下鍵是不可覆蓋的:

  • ??(清除過(guò)濾模式)
  • ??(以交互方式更新不匹配的快照)
  • ??(退出)
  • ??(更新所有不匹配的快照)
  • ?w? (顯示手表模式使用情況/可用操作)

可以覆蓋以下內(nèi)置功能鍵:

  • ??(測(cè)試文件名模式)
  • ??(測(cè)試名稱(chēng)模式)

正如你所期望的那樣,可以聲明任何未由內(nèi)置功能使用的密鑰。盡量避免使用在各種鍵盤(pán)上難以獲得的鍵(例如?é?, ??),或者默認(rèn)情況下不可見(jiàn)的鍵(例如,許多 Mac 鍵盤(pán)沒(méi)有諸如?|?, ?\`?,?[`? 等字符的視覺(jué)提示)

發(fā)生沖突時(shí)

如果你的插件嘗試覆蓋保留鍵,Jest 會(huì)錯(cuò)誤地顯示一條描述性消息,例如:

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

第三方插件也被禁止覆蓋配置的插件列表(?watchPlugins?數(shù)組設(shè)置)中先前存在的另一個(gè)第三方插件已經(jīng)保留的密鑰。發(fā)生這種情況時(shí),你還會(huì)收到一條錯(cuò)誤消息,試圖幫助你解決此問(wèn)題:

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.


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)