赛普拉斯自定义命令无法识别

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 文件?

【问题讨论】:

supportFilecypress.json 中的值是否指向您的index.js 文件?如果未设置,您是否已将 index.js 从其默认位置移出? 我的 cypress.json 中唯一的内容是: "requestTimeout": 25000 是位于[project root directory]/cypress/support/index.jsindex.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 中,但您可以单击文件旁边的 &gt; 以显示它们。 出于某种原因,import './commands' 更喜欢加载commands.js,而不是.ts 文件,它没有自动更新并且缺少该功能。删除伴随的 .js 文件解决了我的问题。

【讨论】:

以上是关于赛普拉斯自定义命令无法识别的主要内容,如果未能解决你的问题,请参考以下文章

markdown 在赛普拉斯执行自定义项目

在赛普拉斯的测试中保留 cookie / localStorage 会话

赛普拉斯 - 如何按顺序运行测试文件

赛普拉斯任务:插件文件丢失或无效

Capistrano 3:运行自定义 shell 命令时无法识别捆绑器

赛普拉斯管道 console.log 和命令日志输出