IDE无法识别Cypress自定义命令,但它可以在测试运行程序中工作

IDE无法识别Cypress自定义命令,但它可以在测试运行程序中工作,cypress,cypress-cucumber-preprocessor,Cypress,Cypress Cucumber Preprocessor,我在Cypress测试中使用javascript文件 在commands.js中,我创建了一个自定义命令: Cypress.Commands.add('selectDropdown', (dropdown) => { cy.get('#' + dropdown).click(); }) 在我的测试文件中,我称之为: cy.selectDropdown('dropdown1'); 当我在TestRunner中运行测试时,它工作得很好。唯一的问题是,我的IDE(PHPStorm)无

我在Cypress测试中使用javascript文件

在commands.js中,我创建了一个自定义命令:

Cypress.Commands.add('selectDropdown', (dropdown) => {
    cy.get('#' + dropdown).click();
})
在我的测试文件中,我称之为:

cy.selectDropdown('dropdown1');
当我在TestRunner中运行测试时,它工作得很好。唯一的问题是,我的IDE(PHPStorm)无法识别该命令

未解析的函数或方法selectDropdown()

如何“告诉”IDE这样的命令存在

更新:

我在support文件夹下创建了一个index.d.ts文件(但是我只使用带有Cypress的JS文件,并且已经有index.JS了)

在ts文件中,我将:

/// <reference types="cypress" />

declare namespace Cypress {
    interface Chainable<Subject> {
        selectDropdownValue(dropdown, value): Chainable<(string)>;

    }
}
//
声明命名空间Cypress{
可链接接口{
选择下拉值(下拉,值):可链接;
}
}
现在,
cy.selectDropdownValue
命令在IDE中被识别出来,它在TestRunner中似乎工作得很好,但是存在一些问题:

  • 我最好避免创建一个新的typescript文件,因为我已经有index.js了,而且我在项目中只使用js文件

  • 声明名称空间-“名称空间”和“模块”是不允许的(没有名称空间)-这是一个Lint警告,因此需要以某种方式替换它

  • 未使用的接口是可链接的。不确定我是否需要在那里使用chaineable,因为它是未使用的,并且在这里
    selectDropdownValue(dropdown,value):chaineable


  • 任何人都可以帮助,如何识别自定义命令的IDE在javascript的方式,而不是typescript。如果您希望IDE为您的自定义命令获得IntelliSense,请多谢。查看此文档。谢谢

    好的,我在更新中写道,我用这种方式解决了这个问题,只是禁用了皮棉检查

    我已经检查了一些原始的cypress命令的内置cypress Chaineable,并且有相同的结构,所以我以相同的方式执行了它,它可以工作

    // tslint:disable-next-line:no-namespace
    declare namespace Cypress {
        interface Chainable<Subject = any> {
            selectDropdownValue(dropdown: string, value: string): Chainable<Subject>;
        }
    }
    
    //tslint:禁用下一行:无命名空间
    声明命名空间Cypress{
    可链接接口{
    选择DropDownValue(dropdown:string,value:string):可链接;
    }
    }
    
    谢谢,所以对于每个自定义命令,我都需要编写可链接的内容。。。嗯,如果没有别的办法的话,没有它我活得更好。如果我在另一个文件中创建一个自定义js函数并从另一个文件调用它,IDE会识别它,但它是我的自定义函数。但无法识别自定义命令。我只想点击那个命令,将我带到定义它的文件…奇怪,但我知道函数与命令不同。谢谢你的链接,不客气。创建自定义函数也是一个好主意,但必须导入所有spec文件才能使用这些方法@DarksymphonyWell,我刚刚发现,文档显示我需要在index.d.ts文件中声明名称空间。但是我没有这样的文件,我没有在cypress中使用typescript,只有js文件,在js中我不能声明名称空间。我知道它不是很好的IDE,但是为了cypress的智能化,我有Visual studio代码,该插件工作得很好,尽管我的主要IDE是PHP storm。另外,PHP storm的版本需要超过2020才能适应它。我相信我使用的是PHP storm 2021,但它无法识别这些自定义命令。我也有VS代码,虽然并没有警告,但我无法通过单击它跳转到自定义命令的声明,即使在VS代码中也是如此。也许然后我会像我提到的那样创建那个.ts文件,但我需要帮助,如何替换我在更新的问题中所写的“declare namespace”。