假设我们有以下套件:
describe('Devices', () => {
describe('Master Data Set-Up', () => {
it('should create the device if necessary', () => {
cy.createDevice()
its('body.id')
.as('deviceId');
});
});
describe('Test Suite 1', () => {
it('should allow to send data to device', () => {
cy.get('@deviceId').then((deviceId) => {
cy.sendData(deviceId, 'Some Data');
});
});
});
});
因此,我们有一个用于创建主数据的设置套件。这是一个简化的版本,实际上它包含几个规范,我想保留它,因为最好在赛普拉斯的输出中阅读。
然后,有一个实际的测试套件希望使用以前创建的数据。在这种情况下,服务器生成的ID应该用于另一个REST调用。
这是假设,cy.createDevice
并且cy.sendData
是内部可使用的自定义命令cy.request
。
运行该命令时cy.get('@deviceId')
失败,因为别名没有在描述块AFAIK之间共享。我尝试使用let deviceId
它,但它是未定义的,因为在处理测试规格时尚不可用。
什么是正确的方法?
好的,首先感谢Aloysius和Arek的回答。但是我有一种直觉,那就是必须有一些更简单的方法来执行此操作,即将ID写入文件。
如前所述,我在尝试使用全局变量时遇到问题:
我尝试使用let deviceId,但未定义,因为在处理测试规格时尚不可用。
我真的很想了解,为什么这不起作用,并进行了一些控制台调试。
我添加了控制台日志:
describe('Devices', () => {
console.log('Loading test suites...')
(...)
});
在运行测试时,我看到了两次日志输出,一次是在第一个describe块存储设备ID的位置之后,一次是在写入主数据之后的第二次。
实际上,我发现此问题是由以下已知的赛普拉斯问题引起的:
https://github.com/cypress-io/cypress/issues/2777
设置baseUrl之后,它实际上可以工作:
describe('Devices', () => {
let deviceId;
before( () => {
Cypress.config('baseUrl', Cypress.env('system_url'))
cy.visit('/');
})
describe('Master Data Set-Up', () => {
it('should create the device if necessary', () => {
cy.createDevice()
.its('body.id')
.then((id) => {
deviceId = id;
});
});
});
describe('Test Suite 1', () => {
it('should allow to send data to device', () => {
cy.sendData(deviceId, 'Some Data');
});
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句