我们有许多来自 API 的变量,在整个测试过程中都会使用它们。这些值在不同点保存到别名中。
我们如何关闭测试之间清除别名的功能?
如果我们使用一个大型测试,这可以正常工作,但 Cypress 默认情况下会清除测试之间的别名,因此当我们将测试分解为更小、更易于管理的单元时,我们就破坏了代码。
简单的例子:
before(() => {
cy.wrap(123).as('alias')
})
it('test1', () => {
// alias is usable here
cy.get('@alias').should('eq', 123)
cy.wrap(456).as('alias2')
});
it('test2', () => {
// alias is missing here
cy.get('@alias').should('eq', 123)
cy.get('@alias2').should('eq', 456)
});
Run Code Online (Sandbox Code Playgroud)
没有配置可以关闭别名清除。
\n您必须创建一个自定义命令才能执行此操作。
\nCypress.Commands.add(\'keepAliases\', function(aliasList) {\n if (!aliasList) {\n aliasList = Object.keys(this)\n .filter(key => ![\'test\', \'_runnable\', \'currentTest\']\n .includes(key))\n }\n aliasList.forEach(key => {\n cy.wrap(this[key]).as(key)\n })\n})\nRun Code Online (Sandbox Code Playgroud)\n用于单个测试
\nbefore(() => {\n cy.wrap(123).as(\'alias\')\n})\n\nit(\'test1\', () => {\n cy.get(\'@alias\').should(\'eq\', 123) \n cy.wrap(456).as(\'alias2\')\n});\n\n// \xe2\x9c\x85 test passes \nit(\'test2\', () => {\n cy.keepAliases()\n cy.get(\'@alias\').should(\'eq\', 123) \n cy.get(\'@alias2\').should(\'eq\', 456)\n});\nRun Code Online (Sandbox Code Playgroud)\n用于所有测试
\nbefore(() => {\n cy.wrap(123).as(\'alias\')\n})\n\nbeforeEach(() => {\n cy.keepAliases()\n})\n\nit(\'test1\', () => {\n cy.get(\'@alias\').should(\'eq\', 123) \n cy.wrap(456).as(\'alias2\')\n});\n\n// \xe2\x9c\x85 test passes \nit(\'test2\', () => {\n cy.get(\'@alias\').should(\'eq\', 123) \n cy.get(\'@alias2\').should(\'eq\', 456)\n});\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1259 次 |
| 最近记录: |