我使用cy.request
创建一个新用户。我需要获取userID
并使用它来组合一个URL。
例如:
function createUser () {
cy.request({
method: 'GET',
url: `/human/sign_in`
}).then(response => {
const $ = cheerio.load(response.body)
const token = $('css to get the token')
cy.request({
method: 'POST',
url: `/signups/brands`,
form: true,
body: {
'authenticity_token': token,
'name': 'some name',
'email': 'some email'
}
})
}).then(response => {
const $ = cheerio.load(response.body)
const userID = $('css to get userID') // here's the userID
})
}
如何返回此userID
,以及如何在以下代码中引用它?
describe('some feature', () => {
it('should do something', () => {
createUser()
cy.visit(`/account/${userID}`) // how to refer to it?
})
})
我查阅了正式文件。 as()
似乎可以起到一些作用。但是我找不到在as()
之后使用cy.request()
的示例。
谢谢!
答案 0 :(得分:1)
我们在测试中使用custom command做同样的事情,并从那里返回值。带有返回值的自定义命令将自动等待返回值,因此您不必担心异步问题或别名的麻烦。
Cypress.Commands.add("createUser", () {
return cy.request({
method: 'GET',
url: `/human/sign_in`
}).then(response => {
const $ = cheerio.load(response.body)
const token = $('css to get the token')
cy.request({
method: 'POST',
url: `/signups/brands`,
form: true,
body: {
'authenticity_token': token,
'name': 'some name',
'email': 'some email'
}
})
}).then(response => {
const $ = cheerio.load(response.body)
return $('css to get userID') // here's the userID
})
})
然后您的测试将如下所示:
describe('some feature', () => {
it('should do something', () => {
cy.createUser().then(userId => {
cy.visit(`/account/${userID}`)
})
})
})
答案 1 :(得分:1)
我认为最简单的方法是在函数中添加一些return语句,并在测试中使用then()
。 (感谢@soccerway提出的建议)
function createUser () {
return cy.request({
method: 'GET',
url: `/human/sign_in`
}).then(response => {
const $ = cheerio.load(response.body)
const token = $('css to get the token')
cy.request({
method: 'POST',
url: `/signups/brands`,
form: true,
body: {
'authenticity_token': token,
'name': 'some name',
'email': 'some email'
}
})
}).then(response => {
const $ = cheerio.load(response.body)
const userID = $('css to get userID') // here's the userID
return userID;
})
}
describe('some feature', () => {
it('should do something', () => {
createUser().then(userID => {
cy.visit(`/account/${userID}`)
})
})
})