使用 Typescript 支持将自定义匹配器添加到 Playwright

Add custom matchers to Playwright with Typescript support

有一个页面 here 可以为 Playwright 编写自定义匹配器。

// playwright.config.ts
import { expect, PlaywrightTestConfig } from '@playwright/test';

expect.extend({
  toBeWithinRange(received: number, floor: number, ceiling: number) {
    const pass = received >= floor && received <= ceiling;
    if (pass) {
      return {
        message: () => 'passed',
        pass: true,
      };
    } else {
      return {
        message: () => 'failed',
        pass: false,
      };
    }
  },
});

const config: PlaywrightTestConfig = {};
export default config;

但在最后一行,他们提到:

For TypeScript, also add the following to global.d.ts. You don't need it for JavaScript.

没有以下代码!

你能帮我找出如何在 global.d.ts 中编写 Typescript 兼容代码吗?

TL;DR 您不能扩展 expect 因为它们使用的类型声明。

您应该为该文档打开一个问题。

查看类型声明,我们看到 Expect 是类型别名而不是接口...

这意味着我们不能扩充这种类型...

如果他们将其更改为接口,那么我们可以扩充模块并添加我们的扩展。

因此,为此,您可能还想打开一个问题或一个拉取请求来修复它(修复它实际上就是更改一两行)。

// global.d.ts
declare global {
 namespace PlaywrightTest {
    interface Matchers<R> {
      toBeWithinRange(a: number, b: number): R;
    }
  }
}

类似的东西将与 Playwright Test Expect 一起使用。