使用 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 一起使用。
有一个页面 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 一起使用。