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

时间:2017-12-07 12:49:33

标签: automated-tests cypress

我在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)测试运行器运行测试。

4 个答案:

答案 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.tsindex.ts 文件扩展名,我已将其更改为 .ts