我在cypress / support / commands.js文件中创建了以下自定义命令。
Cypress.Commands.add("login", (username, password) => {
cy.request({
method: 'POST',
form: true,
url: '/test/login/',
body: {'username': username, 'password': password}
})
})
在将登录功能移动到此自定义命令之前,我已经进行了测试传递和登录工作。我使用cy.login(testuser,testpwd)在我的规范中调用它,但是我收到以下错误消息:TypeError:cy.login不是函数。在评估任何测试文件之前加载了docs say /cypress/support/commands.js,所以我假设只是在那里放置一个自定义命令就可以使命令可用。我通过本地(GUI)测试运行器运行测试。
答案 0 :(得分:4)
index.js
中的所有代码和引用的模块都会在测试文件之前加载。因此,您需要在commands.js
文件中引用(require)index.js
。
但是,您可以直接在测试文件中导入commands.js
模块,但是您需要在每个测试文件中包含它。
建议的方法是将其包含在index.js
文件中,您不必担心在测试文件中明确引用它。
答案 1 :(得分:1)
要扩展@Dinesh Kumar出色的answer,请务必在cypress.json
内添加对默认支持文件(在这种情况下,不幸的命名方案)的默认支持文件,该行:supportFile: false
。
从您的cypress.json
中删除该行。如果您不满意,也可以使用默认路径cypress/support/index.js
指定其他路径。
将index.js与commands.js文件一起使用-都在support
文件夹中:
// index.js
const customCommands = require('./commands.js')
module.exports = {
commands: customCommands
}
并仔细检查您的设置:
// cypress.json
{
"baseUrl": "http://demo.your-domain.test",
"supportFile": false, <-- delete this if present
...
}
答案 2 :(得分:0)
可能有助于将import './commands.js/';
行插入index.js
答案 3 :(得分:0)
对我来说,当我添加时它有效
declare namespace Cypress {
interface Chainable {
clearLocalStorageIframe(): void
}
}
我使用的是 7.2.0 Cypress 和 command.ts
和 index.ts
文件扩展名,我已将其更改为 .ts