如何在 Cypress 中正确输入插件
How to properly type plugins in Cypress
我发现 Cypress 中的打字稿支持有点令人困惑。我能够相当轻松地为我的自定义命令实现正确的输入。但是,我正在努力让它与插件一起工作。
例如,如果我有这个简单的 plugins/index.ts
文件。
import { generateEmail } from "./my-temp-mail-file"
const pluginConfig = async (on, config) => {
on("task", {
generateEmail: async () => {
const email = await generateEmail()
return email
}
})
}
export default pluginConfig
on, config
总是未定义的类型(即Parameter 'on' implicitly has an 'any' type
)。即使我包含 type declaration suggested by Cypress 也无济于事。
当我尝试使用自定义插件时,then
方法中可用的 return 参数始终是 unknown
.
例如 email
总是未知的。
cy.task("generateEmail").then(email => {
///...do something
})
目前我正在导入我的类型,这很有效,但有点烦人。
cy.task("generateEmail").then((email: string) => {
///...do something
})
有没有办法像使用命令一样让它们自动存在?
您可以通过悬停 Cypress.PluginConfig
查看 on, config
的类型,但不可否认的是,注释应该开始了。
如果generateEmail()
有return类型,会在任务中推断
/**
* @type {Cypress.PluginConfig}
*/
export default (on: Cypress.PluginEvents, config: Cypress.PluginConfigOptions) => {
on("task", {
generateEmail: async () => {
const email = await generateEmail() // type shows "const email: string"
return email
}
})
}
function generateEmail(): Promise<string> {
return Promise.resolve('z')
}
要在测试中键入任务 return 值,请将其添加到插件
declare global {
namespace Cypress {
interface Chainable {
task(event: 'generateEmail'): Chainable<string>;
}
}
}
cy.task('generateEmail').then(email => { // type shows "(parameter) email: string"
...
})
我发现 Cypress 中的打字稿支持有点令人困惑。我能够相当轻松地为我的自定义命令实现正确的输入。但是,我正在努力让它与插件一起工作。
例如,如果我有这个简单的 plugins/index.ts
文件。
import { generateEmail } from "./my-temp-mail-file"
const pluginConfig = async (on, config) => {
on("task", {
generateEmail: async () => {
const email = await generateEmail()
return email
}
})
}
export default pluginConfig
on, config
总是未定义的类型(即Parameter 'on' implicitly has an 'any' type
)。即使我包含 type declaration suggested by Cypress 也无济于事。
当我尝试使用自定义插件时,then
方法中可用的 return 参数始终是 unknown
.
例如 email
总是未知的。
cy.task("generateEmail").then(email => {
///...do something
})
目前我正在导入我的类型,这很有效,但有点烦人。
cy.task("generateEmail").then((email: string) => {
///...do something
})
有没有办法像使用命令一样让它们自动存在?
您可以通过悬停 Cypress.PluginConfig
查看 on, config
的类型,但不可否认的是,注释应该开始了。
如果generateEmail()
有return类型,会在任务中推断
/**
* @type {Cypress.PluginConfig}
*/
export default (on: Cypress.PluginEvents, config: Cypress.PluginConfigOptions) => {
on("task", {
generateEmail: async () => {
const email = await generateEmail() // type shows "const email: string"
return email
}
})
}
function generateEmail(): Promise<string> {
return Promise.resolve('z')
}
要在测试中键入任务 return 值,请将其添加到插件
declare global {
namespace Cypress {
interface Chainable {
task(event: 'generateEmail'): Chainable<string>;
}
}
}
cy.task('generateEmail').then(email => { // type shows "(parameter) email: string"
...
})