在Cypress.io测试中,我正在调用减法函数并以“ example-spec”形式编写测试,如下所示。一切正常。但是我们如何调用在不同js文件中编写的相同减法函数,例如Cypress测试中的'/basetest.js'?
describe ('Calling a function', function(){
it('Call the Subtract function and asert the calculation', function(){
cy
.wrap({sub: subValues})
.invoke('sub', 15, 8)
.should('eq', 7) // true
})
})
//减函数:
const subValues = (a, b) => {
return a - b
}
答案 0 :(得分:5)
将新文件添加到cypress/support/
,例如cypress/support/functions.js
cy.myproject = {
makeUniqueUsername: () => {
return 'cypress-test-' + Cypress.moment().format("YYMMDD-HHmmss");
}
}
通过在cypress/support/index.js
中添加对它的引用来包含它
import './functions'
然后从任何测试中调用函数
describe('registration', function() {
it('can register', function() {
let username = cy.myproject.makeUniqueUsername();
cy.visit('/register');
cy.get('#username').type(username);
// etc...
})
});
在考虑普通函数而不是赛普拉斯的“自定义命令”时,请注意cypress documentation encourage plain functions where custom commands aren't necessary in single spec files,尽管我不同意它们不应该干燥测试代码。
感谢其他答案,让我明白了这一点。
主要的补充是逐步实现它,并将自定义函数保留在全局cy.*
命名空间之外。
注意:通过这种方式(与通过Cypress.Commands.add
注册命令相反),您会失去Cypress UI中的日志记录和时间旅行。 (感谢@conny)。取决于您和您的团队,您对每种情况,使用显式js的明确步骤或IDE / linter / etc支持的价值都更高。注册命令使其成为测试中的明确步骤,而不仅仅是支持功能。
答案 1 :(得分:4)
来自https://docs.cypress.io/api/cypress-api/custom-commands.html
将此内容放入您的support/commands.js
文件中:
Cypress.Commands.add('subValues', (a, b) => { return a - b });
将此文件放置在您的support/index.js
文件中(如果尚未存在)(应该存在):
import "./commands";
像这样在测试中调用它:
describe ('Calling a function', function(){
it('Call the Subtract function and asert the calculation', function(){
cy
.subValues(15, 8)
.should('eq', 7) // true
});
});
答案 2 :(得分:1)
Cypress包含一个外部库文件,默认情况下位于(path to project)/support/index.js
。
此文件包含在所有测试文件中,因此您可以在此处放置共享代码。
您还可以在support
中使用以下代码在index.js
文件夹中包含其他文件:
import './MySupportFile.js'
当包含一个外部测试文件时,简单的函数定义似乎不会继续存在。我不确定为什么。将功能插入cy
对象对我来说是有效的:
cy.myFunction = greeting => {
console.log(greeting);
};
cy.myNamespace = {};
cy.myNamespace.myNamespacedFunction = () => {
console.log("hi");
};
cy
对象中的这些函数将继承到您拥有的任何/integration
文件中。