我想在每个测试之间传递/共享数据。在赛普拉斯中实现它的最佳方法是什么?
例如:
it('test 1'), () => {
cy.wrap('one').as('a')
const state1 = 'stat1'
})
it('test 2'), () => {
cy.wrap('two').as('b')
})
it('test 2'), () => {
//I want to access this.a and this.b
//Also I want to access state1
})
答案 0 :(得分:0)
对于Javascript变量,您可以执行以下操作:
let state;
describe('test 1', () => {
it('changes state', () => {
state = "hi";
});
});
describe('test 2', () => {
it('reports state', () => {
cy.log(state); // logs "hi" to the Cypress log panel
});
});
.as()
在两次测试之间似乎无法携带。
答案 1 :(得分:0)
假设您正在尝试传递文本
it('test 1'), () => {
cy.wrap('one').as('a')
}
it('test 2'), () => {
cy.wrap({ valueName: 'two' }).as('b')
}
it('test 2'), () => {
//I want to access this.a and this.b
cy.get('@a').then((thisIsA) => {
cy.log(thisIsA);
// logs 'one'
}
cy.get('@b').its('valueName').then((thisIsB) => {
cy.log(thisIsB);
// logs 'two'
}
cy.get('@b').its('valueName').should('eq', 'two')
}
答案 2 :(得分:0)
我尝试了其他一些解决方案,但它们对我不起作用。也许事情随着最新版本而改变了。下面的示例应该起作用。请注意,两个测试都使用function(),这使事情保持在“ this”的上下文中。
it('get the value', function () {
cy.get('#MyElement').invoke('text').as('mytext1')
})
it('use the value', function () {
cy.log(this.mytext1);
})
答案 3 :(得分:0)
正如 abbr
在评论中指出的那样,如果测试在不同的 url 上开始,则使用全局变量共享值将不起作用。
所以这些都不起作用:
describe
/ context
块之外)Mocha
this.state
(测试后会清除)Cypress
as
describe("Test", () => {
it("Can access 3000", function () {
cy.visit("http://localhost:3000");
cy.writeFile("shared.json", {count: 2})
});
it("Can access 8000", function () {
cy.visit("http://localhost:8000");
cy.readFile("shared.json").then(cy.log)
});
});