赛普拉斯自定义命令无法识别
Posted
技术标签:
【中文标题】赛普拉斯自定义命令无法识别【英文标题】:Cypress custom commands not recognized 【发布时间】:2019-06-05 15:07:17 【问题描述】:我想创建一个自定义登录命令。我已将命令添加到我的 commands.js
文件中,并且还将导入命令添加到 index.js
。
当我在我的集成文件夹下创建一个新的测试文件时,我尝试使用cy.loginWith()
引用我的新命令,但它没有将其识别为命令。
如果我将 import ../../../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
文件?
【问题讨论】:
supportFile
在cypress.json
中的值是否指向您的index.js
文件?如果未设置,您是否已将 index.js
从其默认位置移出?
我的 cypress.json 中唯一的内容是: "requestTimeout": 25000
是位于[project root directory]/cypress/support/index.js
的index.js
文件吗?
是的。它应该在其他地方吗?
不,这是默认位置,它应该在哪里。我正在检查它是否没有被移动 - 然后赛普拉斯将无法连接它。不知道为什么找不到
【参考方案1】:
我的问题是智能感知运行良好,并且一切运行正常:
import '../support/commands';
我的解决方法非常简单......只需将supportFile
添加到您的cypress.json
:
"supportFile": "cypress/support/index.ts",
"baseUrl": "http://localhost:3000"
【讨论】:
【参考方案2】:以上方法都不适合我,但这有效:
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
【讨论】:
我正在使用打字稿并在命名空间周围添加声明全局解决了我的问题。 我正在使用打字稿和 IntelliJ,添加declare global
就可以了。谢谢。【参考方案3】:
我重新启动了赛普拉斯,并选择了正确的项目文件夹,现在一切正常。我想对我来说,解决方案是确保您选择正确的项目文件夹。不过感谢您的所有建议。
【讨论】:
您是如何选择正确的项目文件夹的?你做了哪些改变?我正面临着确切的问题。 打开 Cypress 时,我确保选择了安装 Cypress 的路径。之后,我将它添加到我的 index.js 中:import "./commands.js" 所以我确保 command.js 在上面的一个位置。 智能代码完成与命令未执行这一事实完全不同。参考:docs.cypress.io/guides/tooling/…【参考方案4】:我遇到了同样的问题。原来我忘了在函数前面加上 cy。仔细检查以确保您没有仅使用名称调用函数
【讨论】:
【参考方案5】:我遇到了同样的问题,但我的原因似乎不同。尽管如此,我还是为遇到相同问题的人添加了我的问题和解决方案,因为明显的结果是相同的错误。
我使用 IntelliJ compile typescript 命令,这会在源 commands.ts
文件旁边生成一个相应的伴随 commands.js
文件。 Intellij 将这些文件隐藏在 ui 中,但您可以单击文件旁边的 >
以显示它们。
出于某种原因,import './commands'
更喜欢加载commands.js
,而不是.ts
文件,它没有自动更新并且缺少该功能。删除伴随的 .js
文件解决了我的问题。
【讨论】:
以上是关于赛普拉斯自定义命令无法识别的主要内容,如果未能解决你的问题,请参考以下文章
在赛普拉斯的测试中保留 cookie / localStorage 会话