我想创建一个自定义的登录命令。我已经将该命令添加到了commands.js
文件中,并且还将导入命令添加到了index.js
中。
当我在集成文件夹下创建一个新的测试文件时,我尝试使用cy.loginWith()
引用我的新命令,但是它不能将其识别为命令。
如果将导入../../../support/commands
添加到新的登录规范文件的顶部,则cy.loginWith()
自定义命令将被识别并正确调用。
但是我知道这不是一件好事。
这是我的commands.js
文件中的自定义命令:
Cypress.Commands.add('loginWith' , (email, password) => {
cy.get('[name="username"]').type(email)
cy.get('[name="password"]').type(password)
cy.get('[name="Login"]').click()
})
这是我的index.js文件:
import "./commands.js"
这是我的list.js
规格文件,位于/cypress/integration/clients/client list/lists
下:
/// <reference types="Cypress" />
import "../../../support/commands"
// login to the app
it('A User logs in and sees a welcome message', () => {
cy.visit('.../login.cfm')
cy.loginWith('username', 'password')
expect(cy.contains('Welcome back!'))
}
)
我可能配置错误,无法识别index.js
文件吗?
答案 0 :(得分:2)
我的问题是intellisense可以正常工作,并且一切都运行良好:
import '../support/commands';
我的修复非常简单...只需将supportFile
添加到您的cypress.json
:
{
"supportFile": "cypress/support/index.ts",
"baseUrl": "http://localhost:3000"
}
答案 1 :(得分:0)
我重新启动了赛普拉斯,并选择了正确的项目文件夹,现在一切正常。我想对于我来说,解决方案是确保您选择正确的项目文件夹。不过要感谢您的所有建议。
答案 2 :(得分:0)
我有同样的问题。原来我忘了给函数加上cy前缀。仔细检查以确保您不只是使用名称来调用函数
答案 3 :(得分:0)
我遇到了同样的问题,但我的原因似乎不同。尽管如此,我还是为遇到相同问题的人添加了我的问题和解决方案,因为明显的结果是相同的错误。
我使用了 IntelliJ compile typescript 命令,这会在源 commands.js
文件旁边生成一个相应的伴随 commands.ts
文件。 Intellij 将这些文件隐藏在 ui 中,但您可以单击文件旁边的 >
以显示它们。
出于某种原因,import './commands'
更喜欢加载 commands.js
,它没有自动更新并且缺少函数,而不是 .ts
文件。删除伴随 .js
文件解决了我的问题。
答案 4 :(得分:0)
以上方法都不适合我,但这很有效:
declare global {
namespace Cypress {
interface Chainable {
customCommand: typeof customCommand;
}
}
}
function customCommand(input: MyCustomClass) {
// ...
}
Cypress.Commands.add('customCommand', customCommand);
在这里得到答案:https://github.com/cypress-io/cypress-documentation/issues/2565